我有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
你能帮我吗? 谢谢
答案 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";
}
希望有帮助。