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

  • 链接地址: http://www.djcxy.com/p/8597.html

    上一篇: Spring MVC : post request and json object with array : bad request

    下一篇: how to get response from rest api callback call