#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) { ... }