Необязательный вложенный JSON объект с Spring RestTemplate - PullRequest
0 голосов
/ 28 марта 2020

В API, который я пытаюсь использовать с Spring RestTemplate, я получаю необязательное поле, как показано в примере ниже. Это необязательное поле является вложенным объектом, и я хотел бы использовать вложенный класс для его сопоставления.

{
  "name": "John",
  "age": 30
}
{
  "name": "John",
  "age": 30,
  "car": {
    "year": 1984,
    "color": "red"
  }
}

Мое текущее определение класса:

public class User {
    public class Car {
        @Getter
        @Setter
        public String color;

        @Getter
        @Setter
        public Integer year;
    }

    @Getter
    @Setter
    public String name;

    @Getter
    @Setter
    public Integer age;

    @Getter
    @Setter
    public Car car;
}

С вызовом:

ResponseEntity<User> response = restTemplate.exchange("http://....", HttpMethod.POST, request, User.class);

Я получаю следующее исключение:

com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of '....User$Car' (although at least one Creator exists): can only instantiate non-static inner class by using default, no-argument constructor

Как можно получить свойство car либо null, либо создать его в классе Car если узел присутствует в json?

1 Ответ

1 голос
/ 28 марта 2020

Не могли бы вы попробовать с обновленным ниже классом. Изменение определяет внутренний класс как stati c.

public  class User {
    public static class Car {
        @Getter
        @Setter
        public String color;

        @Getter
        @Setter
        public Integer year;
    }

    @Getter
    @Setter
    public String name;

    @Getter
    @Setter
    public Integer age;

    @Getter
    @Setter
    public Car car;
}
...