Весенняя загрузка после сопоставления десериализует длинный массив

#java #json #spring-boot

Вопрос:

Я пытаюсь десериализовать список длинных значений:

 {  "ids": [1, 2, 3] }  

С помощью следующего метода:

 @PostMapping(value = "/export")  public ResponseEntitylt;SomeDtogt; exportCsv(@RequestBody Long[] ids) {  // Some methods  return ResponseEntity.ok(someDto);  }  

Но я продолжаю получать следующую ошибку: JSON parse error: Cannot deserialize value of type Long . Ошибка та же, что и при использовании Listlt;Longgt;, только для ArrayListlt;Longgt;lt;Longgt;.

Я пробовал это @JsonDeserialize(using = NumberDeserializers.LongDeserializer.class) , но, похоже, либо это не работает, либо я использую его неправильно.

Ответ №1:

Тело запроса выше представляет класс POJO со ids свойством, как показано ниже

 public class Body {   private Long[] ids;  //getters and setters   }  

А затем используйте это POJO в качестве тела запроса

 public ResponseEntitylt;SomeDtogt; exportCsv(@RequestBody Body body)  

Ответ №2:

С объектом json, который вы пытаетесь отправить, spring предполагает, что это объект с полем участника ids . Если вы хотите прикрепиться непосредственно к списку, отправьте следующий json в качестве тела:

 [5, 6, 8]  

Это будет работать для:

 @PostMapping(value = "/export") public ResponseEntitylt;SomeDtogt; exportCsv(@RequestBody Long[] ids) { ... }  

и

 @PostMapping(value = "/export") public ResponseEntitylt;SomeDtogt; exportCsv(@RequestBody Listlt;Longgt; ids) { ... }