#java #json #spring #spring-mvc
#java #json #spring #spring-mvc
Вопрос:
У меня есть следующие части кода. Когда я отправляю HTTP-запрос, я получаю ошибку 400, связанную с полем carCoordinates (если я ее удалю, все будет в порядке). Предполагается, что это список double .
Кроме того, когда я меняю имя carCoordinates на carcoordinates без изменения имени получателя, запрос принимается хорошо, но я не могу получить данные, поскольку getter не связан с объектом (null). Если я изменю имя получателя на getCarcoordinates, чтобы оно соответствовало полю, это больше не будет работать. Есть идеи, почему это не работает?
CarEvent.java :
Public class CarEvent {
@JsonProperty("carCoordinates")
protected List carCoordinates;
...
public void setCarCoordinates(Coordinate c) {
...
}
public List getCarCoordinates() {
return CarCoordinates;
}
}
Отправленный JSON является :
{
"id": [006001556, 631016236, 125899724],
"speed": "0",
"carCoordinates": [56.477369, 26.64477, 56.466177, 26.651258, 80.545048, 50.614582],
"num": "5"
}
Запрашиваемый класс сервера является:
@RequestMapping(method = RequestMethod.POST, value = "/car-action", produces = "application/json;charset=UTF-8")
@ResponseBody
public String CarAction(@RequestBody CarEvent requestBody, @RequestHeader HttpHeaders httpHeaders) {
...
}
Ответ №1:
Проблема, вероятно, в вашем методе установки. Ваше поле имеет тип List
, но установщик принимает объект Coordinate
. Основываясь на вашем запросе json, я думаю, что это должно быть:
public void setCarCoordinates(List c) {
this.carCoordinates = c;
}
Комментарии:
1. Потрясающе, теперь это работает! Я не знал, что сигнатура метода setter важна для сопоставления. Большое вам спасибо!
2. Отлично. Да, это важно, Джексон внутренне использует методы установки с отражением для установки полей.
Ответ №2:
Ваш CarEvent
имеет метод setter с неправильным аргументом.
либо создайте класс Coordinate
и расширьте до List, либо обновите, как показано ниже:
public void setCarCoordinates(List cordinates) {
...
}