#ajax #spring #post
#ajax #spring #Публикация
Вопрос:
У меня есть Spring Boot 2.1.3 веб-приложение thymeleaf. Я пытаюсь передать массив json контроллеру с помощью ajax POST. Массив 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 });
}
});
Теперь, если я передам obj-массив через GET следующим образом:
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) {
}
});
Я всегда получал ошибку 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:
Возможное решение (без создания 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";
}
надеюсь, это поможет.