Вложенные объекты JSON не десериализуются
Есть условный запрос:
{
"parcelPackage": {
...какие-то поля
}
}
Если на метод контроллера приходит JSON такого формата, то при десириализация поля все null.
Если на вход приходит запрос такого формата:
{
...какие-то поля
}
Десириализация проходит корректно и поля имеют корректные значения, почему так?
Мне бы хотелось использовать первый вариант запроса.
Метод контроллера:
RequestMapping(method = RequestMethod.POST, value = "/createPackage")
public CreatePackageParcelRs createPackage(@RequestBody final ParcelPackage parcelPackageRq) {
final CreatePackageParcelRs response = new CreatePackageParcelRs();
if (parcelPackageRq != null) {
packageService.createOrUpdatePackage(parcelPackageRq);
response.setResultCode("200");
response.setResultDescription("Success");
} else {
response.setResultCode("400");
response.setResultDescription("Bad Request");
}
return response;
}
Ответы (1 шт):
Потому что структура
{
"parcelPackage": {
...какие-то поля
}
}
будет верна в том случае, если Ваш объект типа ParcelPackage будет входит в другой объект:
@RequestMapping(method = RequestMethod.POST, value = "/createPackage")
public CreatePackageParcelRs createPackage(@RequestBody SomeObject someObject) {
...
}
public class SomeObject {
private ParcelPackage parcelPackage;
// Getters and setters
}
Изучите более подробно структуру JSON. {} (фигурные скобки) - обозначют ОБЪЕКТ в структуре JSON. Когда вы пишите их - это уже означает начало объекта (даже если нет имени). Посему, используя нерабочий вариант вашей структуры, вы отсылает контроллеру ОБЪЕКТ В ОБЪЕКТЕ, а в контроллере принимаете просто один ОБЪЕКТ и из-за этого получаете null, потому что внутри объекта ParcelPackage нет никакого parcelPackage