Передача массива JSON в Spring Controller - PullRequest
0 голосов
/ 21 апреля 2019

У меня Spring Boot 2.1.3 + тимилиф веб-приложение.Я пытаюсь передать массив 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:

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

    }
  });

Я всегда получаю com.fasterxml.jackson.databind.exc.MismatchedInputException ошибкаесли я не помещу Object в качестве полученного типа в контроллере:

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 голосов
/ 21 апреля 2019

Возможное решение (без создания 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";
}

Надежда помогает.

...