Почему Джексон сериализует суперкласс как отдельный объект? - PullRequest
0 голосов
/ 24 сентября 2019

Предположим, у меня ниже сущностей Cassandra.

@Entity
class Person {
    private String name;
    // getter and setter
}

@Entity
class Job {
    private String title;
    // getter and setter
}

class PersonWrapper extends Person {
    private Job job; 
    // getter and setter
}

И API дает:

{
    "name": "rick",
    "job": {
        "title": "programmer"
    },
    "person": {
        "name": "rick",
        "job": {
            "title": "programmer"
        }
    }
}

Мое временное решение - использовать JsonIgnoreProperties в классе оболочки.Есть ли какое-либо решение по устранению дублирующегося объекта?

1 Ответ

1 голос
/ 24 сентября 2019

Джексон отображает поля JSON на равные поля в Java-объекте, сопоставляя имена полей и полей JSON из вашего класса без «get» и «set» (вы должны иметь геттеры и сеттеры в вашей сериализацииклассы).В вашем примере вам нужно создать такой класс:

@Getter
@Setter
class CommonClass {
    String name;
    Job job; 
    Person person;
}
@Getter
@Setter
class Job {
    String title;
}
@Getter
@Setter
class Person {
    String name;
    Job job; 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...