@JSONUnwrapped на проблему плоского встроенного поля - PullRequest
0 голосов
/ 12 марта 2019

У меня есть класс:

public class Person{
private int id;
@JsonUnwrapped
private Father father
//getters/setters

@ToString
@Accessors
public static class Father{
  private String name;
  private String surname;
}

и форма, следующая за файлом JSON

{
  "id": 12,
  "name": "Ned",
  "surname": "Stark"
}

при чтении:

ObjectMapper mapper = new ObjectMapper();
Person myPerson =
        mapper.readValue(new File("src/main/resources/data/rest/person.json"), Person.class);
 System.out.println(myPerson);

Я продолжаю получать:

(...) father=Student.Father(name=null, surname=null)

с ошибкой:

Исключение в теме "главная" com.fasterxml.jackson.databind.exc.InvalidDefinitionException: нет найден сериализатор для класса com.example.demo.rest.r01_json.Person $ Отец и без свойств обнаружил, чтобы создать BeanSerializer (чтобы избежать исключения, отключите SerializationFeature.FAIL_ON_EMPTY_BEANS) (через цепочку ссылок: com.example.demo.rest.r01_json.Person [ "отец"]

Что я должен исправить, чтобы обеспечить уплощенное содержание отца? Или это невозможно, и я должен поместить его как вложенный объект JSON, например ?:

"father":{
  "name": "Ned",
  "surname": "Stark"
}

EDIT

Я отредактировал его, добавив Person cosntructor с

 @JsonCreator // DESERIALIZATION: JSON -> POJO
  public Person(
...

      @JsonProperty("name") String name,
      @JsonProperty("surname") String surname) {
...
    this.father = new Father(name, surname);

с Father вложенным в Person класс:

@AllArgsConstructor
  private static class Father {
    private String name;
    private String surname;
  } 

все еще получает:

Exception in thread "main" com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `com.example.demo.rest.r01_json.Person$Father` (no Creators, like default construct, exist): cannot deserialize from Object value (no delegate- or property-based Creator)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...