【问题标题】:Spring MVC : post request and json object with array : bad requestSpring MVC:发布请求和带有数组的json对象:错误请求
【发布时间】:2015-05-04 11:38:59
【问题描述】:

我正在尝试使用 Spring MVC 从 http POST 请求中检索参数。

请求包含以下 json 对象(内容类型: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 请求中有多个参数时,如何处理?

【问题讨论】:

    标签: json spring http spring-mvc post


    【解决方案1】:

    我认为您正在寻找类似 `@RequestBody.创建一个类来表示您的 JSON 数据。在您的情况下,此类将包含两个成员变量 - globalId 作为字符串,lines 作为它所代表的对象的数组。然后在您的控制器方法中,您将在此类类型上使用 @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

    【讨论】:

      【解决方案2】:

      确实,我必须使用@RequestBody 来获取 JSON 对象。

      快速总结,取决于参数在 http POST body 请求中的传递方式:

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

      2. 多个参数(Content-Type: application/x-www-form-urlencoded),每个参数使用@RequestParam

        李>

      【讨论】:

        【解决方案3】:

        创建模型对象来映射您的 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。 要实现这个 spring 必须需要在您的应用程序中包含 jackson-core 和 jackson-mapper 库,并且您的 Java 类应该具有 getter 和 setter,即它必须遵循 bean 标准。

        【讨论】:

          猜你喜欢
          • 2015-09-22
          • 1970-01-01
          • 2014-05-17
          • 2017-04-17
          • 1970-01-01
          • 2014-04-01
          • 2020-06-09
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多