我尝试使用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"和"线" ?或者因为它们在同一个json对象中,它必须被处理有一个参数?当Post请求中有多个参数时,如何继续?
答案 0 :(得分:3)
我认为你正在寻找像@RequestBody这样的东西。创建一个类来表示您的JSON数据。在您的情况下,此类将包含两个成员变量 - globalId作为字符串,行作为它所代表的对象的数组。然后在您的控制器方法中,您将在此类类型上使用@RequestBody批注,以便Spring能够将JSON转换为对象。请查看以下示例。
http://www.leveluplunch.com/java/tutorials/014-post-json-to-spring-rest-webservice/
JQuery, Spring MVC @RequestBody and JSON - making it work together
http://www.techzoo.org/spring-framework/spring-mvc-requestbody-json-example.html
答案 1 :(得分:1)
实际上,我必须使用@RequestBody来获取JSON对象。
快速摘要,具体取决于参数在http POST正文请求中的传递方式:
一个JSON对象( Content-Type:application / json ),使用 @RequestBody 将json对象映射到java对象
< / LI>多个参数( Content-Type:application / x-www-form-urlencoded ),对每个参数使用 @RequestParam
答案 2 :(得分:1)
创建模型对象以映射您的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 Object。 要实现这个弹簧,必须在应用程序中包含 jackson-core和jackson-mapper 库,并且您的Java类应该具有getter和setter,即它必须遵循bean标准。