У меня есть класс:
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)