При десериализации Джексон не будет знать, какой дочерний класс должен использоваться, поэтому он принимает только значение BaseClass
и игнорирует ChildClass
. Вы можете использовать @JsonTypeInfo
вBaseClass, это помогает Jackson
определить правильные ChildClass
(Вы должны добавить тип в json)
Я не уверен, что содержит BaseClass
, поэтому я просто предполагаю случайные атрибуты ниже.
BaseClass.java
@Data
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "type")
@JsonSubTypes({
@JsonSubTypes.Type(value = ChildOne.class, name = "childOne"),
@JsonSubTypes.Type(value = ChildTwo.class, name = "childTwo")})
public class BaseClass {
private Integer id;
}
ChildOne .java
@Data
public class ChildOne extends BaseClass {
private String name;
}
ChildTwo.java
@Data
public class ChildTwo extends BaseClass {
private String address;
}
Если вы запрашиваете Json,
{
"labelData": [
{
"id": 0, // -|
"type": "childOne", // |-> This will go to ChildOne.class
"name": "Foo" // _|
}, {
"id": 0, // -|
"type": "childTwo", // |-> This will go to ChildTwo.class
"address": "Somewhere in Earth"// _|
}
]
// Rest of Json
}