将JSON数组传递给Spring Controller

时间:2019-04-21 17:22:03

标签: ajax spring post

我有Spring Boot 2.1.3 + thymeleaf webapp。我正在尝试通过ajax POST将json数组传递给控制器​​。 JSON数组的构建如下:

var obj = [];
$('#fornitori-table').find('tr').each(function () {
  var row = $(this);
  if (row.find('input[type="checkbox"]').is(':checked')) {
     var cellObj = row.find('td:eq(1)');
     if (cellObj.length > 0) obj.push({ idFurn : cellObj[0].innerText });
     }
});

现在,如果我通过GET传递 obj 数组,如下所示:

location.href = "/sendRdo/"+encodeURI(JSON.stringify(obj));

到控制器:

@GetMapping("/sendRdo/{idS}")
public String sendRdo(@PathVariable JSONArray obj, Model model) {
....
}

一切正常..如果我尝试通过ajax post传递它:

$.ajax({
    type: "POST",
    url: "/sendRdo",
    dataType: "json",
    data: JSON.stringify(obj), 
    contentType: "application/json",
    success: function(data) {

    }
  });

除非我将Object作为接收类型放入控制器,否则我总是会出现 com.fasterxml.jackson.databind.exc.MismatchedInputException 错误。

public String sendRdo(@RequestBody Object obj, Model model) {
}

如果我调试并指向obj变量,我会看到LinkedHashMap ..但是如果我放Map <>而不是Object,则会收到上面的错误。

我正在使用:

<dependency>
        <groupId>org.json</groupId>
        <artifactId>json</artifactId>
        <version>20180813</version>
</dependency>

对于json

你能帮我吗? 谢谢

1 个答案:

答案 0 :(得分:0)

可能的解决方案(不创建pojo):

function foo() {
  var obj=[];
  obj.push({id : 1});
  obj.push({id : 2});
  $.ajax({
       type: "post",
       url: "/test",
       contentType: "application/json",
       dataType:"json",
       data: JSON.stringify(obj),
       success: function(result) {

       }
  });
}

控制器:

@PostMapping("/test")
String test(@RequestBody Object obj) {
    List<Map<String,Integer>> list = (ArrayList)obj;
    list.forEach(m -> m.forEach( (k,v) -> System.out.println("key: "+k+" value:"+v)) );
    return "someview";
}

希望有帮助。