Spring Boot使用ajax将对象数组发送到控制器

时间:2017-09-24 16:06:28

标签: java ajax spring spring-mvc spring-boot

所以,我跟着其他一些关于如何设置spring boot controller来解析传入数据的问题,这是对象数组

我将以下一种形式发送数据:

var myData = [ {lang_id : 1, title : "blabla", description : "blablabla"}, {lang_id : 2, title : "der text", description : "der text"}, ... ] 

$.ajax({
    url: "/test2",
    data: JSON.stringify(myData),
    type: "POST",
    dataType:"json",
    contentType:'application/json'   
    ,success : function(res){
        console.log("ok!", res.data);
    }
    ,error : function(a,b,c){
        console.log("err!", a, b, c);
    }
});

根据其他答案,我已经制作了我的回复和回复包装对象。

public class Response {
    private Integer lang_id;
    private String title;
    private String description;
    //getter and setters
}

public class RequestWrapper {
    private List<Response> items;
    //getters and setters
}

然后,我按如下方式设置我的控制器:

@PostMapping(value="/test2")
public @ResponseBody RequestWrapper postIt(@RequestBody RequestWrapper req) {
    System.out.printf("\n\n%s\n\n", req);
    return req;
}

任何一个答案都有这样的解决方案,但这一个对我不起作用。我收到以下错误:

  

org.springframework.http.converter.HttpMessageNotReadableException:   JSON解析错误:无法反序列化实例   com.mypackage.controllers.RequestWrapper out of START_ARRAY token;   嵌套异常是   com.fasterxml.jackson.databind.JsonMappingException:不能   反序列化com.mypackage.controllers.RequestWrapper的实例   START_ARRAY令牌

我不知道还有什么可以尝试。

1 个答案:

答案 0 :(得分:0)

我认为应该是:

public @ResponseBody RequestWrapper postIt(@RequestBody Response[] req)

鉴于您的RequestWrapper POJO,正确的JSON具有以下形式:

{
  "items": [
    ...
  ]
}