Spring MVC:发布请求和包含数组的json对象:错误的请求
我试图从Spring MVC的HTTP POST请求中检索参数。
该请求包含以下json对象(content-type:application / json),它本身包含一个customObjects数组:
{
"globalId":"338",
"lines":[
{
"id": "someId",
"lib":"blabla",
...
}
]
}
以下是我正在尝试使用的代码:
@RequestMapping(method = RequestMethod.POST, value = "/valider")
@ResponseBody
public void valider(final HttpServletRequest request, @RequestParam("globalId") final String globalId, @RequestParam("lines") final MyCustomObject[] lines) {
我得到的只是一个“错误的请求”错误(http 400)。
是否可以单独检索两个参数“globalId”和“lines”? 或者因为他们在同一个json对象中,它必须被处理有一个单一的参数? 如何在Post请求中有多个参数时继续操作?
我想你正在寻找类似`@RequestBody的东西。 创建一个类来表示您的JSON数据。 在你的情况下,这个类将包含两个成员变量 - globalId作为一个字符串和行作为它所表示的对象的数组。 然后在你的控制器方法中,你将在这个类类型上使用@RequestBody注解,以便Spring能够将JSON转换为对象。 检查下面的例子。
http://www.leveluplunch.com/java/tutorials/014-post-json-to-spring-rest-webservice/
JQuery,Spring MVC @RequestBody和JSON--使它们一起工作
http://www.techzoo.org/spring-framework/spring-mvc-requestbody-json-example.html
创建模型对象来映射你的Json数据
class DLibrary{
int id;
String lib;
//getters/setters
}
class GLibrary{
int globalId;
List<DLibrary> lines;
//getters/setters
}
用下面的代码替换你的控制器代码
@RequestMapping(method = RequestMethod.POST, value = "/valider")
@ResponseBody
public void valider(@RequestBody GLibrary gLibrary) {
@RequestBody注释将隐式地将Json映射到Java对象。 要实现这个春天,必须要求应用程序中包含jackson-core和jackson-mapper库,并且你的Java类应该有getter和setter,即它必须遵循bean标准。
的确,我必须使用@RequestBody来获取JSON对象。
快速总结,取决于参数在http POST主体请求中的传递方式:
一个JSON对象(Content-Type:application / json),使用@RequestBody将json对象映射到一个java对象
多个参数(Content-Type:application / x-www-form-urlencoded),对每个参数使用@RequestParam
上一篇: Spring MVC : post request and json object with array : bad request