Spring MVC:使用数组发出请求和json对象:错误请求

时间:2015-03-03 17:36:59

标签: json spring http spring-mvc post

我尝试使用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请求中有多个参数时,如何继续?

3 个答案:

答案 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正文请求中的传递方式:

  1. 一个JSON对象( Content-Type:application / json ),使用 @RequestBody 将json对象映射到java对象

    < / LI>
  2. 多个参数( 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标准。