У меня есть такая иерархия классов:
public class Zoo {
public Animal animal;
@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
include = As.PROPERTY,
property = "type")
@JsonSubTypes({
@JsonSubTypes.Type(value = Dog.class, name = "dog"),
@JsonSubTypes.Type(value = Cat.class, name = "cat")
})
public static class Animal {
public String name;
}
@JsonTypeName("dog")
public static class Dog extends Animal {
public double barkVolume;
}
@JsonTypeName("cat")
public static class Cat extends Animal {
boolean likesCream;
public int lives;
}
}
Например, если я хочу сериализовать dog
, я получаю следующий json:
{
"animal": {
"type": "dog",
"name": "lacy",
"barkVolume": 0
}
}
(Как вы можете видеть, оно содержит дополнительное поле type
)
и наоборот (Если вы хотите десериализовать JSON в объект, я должен предоставить дополнительное поле type
)
Я не хочуиметь это дополнительное поле.Я хочу сериализовать / десериализовать в зависимости от установленных полей.Например, если json содержит поле barkVolume
, очевидно, что это Dog
, а если json содержит likesCream
lives
- это Cat.
Если эти поля не предоставлены, я готов получить исключение.
Есть ли способ проще, чем написать собственный сериализатор / десериализатор?