假设我们有以下类型:
RecurringJob.AddOrUpdate(() => SoccerDataFetcher_UpdatePlayersOfTeams(), Cron.Daily);
让interface Animal {}
class Dog implements Animal {...}
class Cat implements Animal {...}
class Zoo {
private String animalType;
private Animal animal;
...
}
和Cat
具有不同的属性,我们如何根据json中始终存在的Dog
字符串将Zoo
对象反序列化为适当的Animal子类型?我知道如何使用animalType
执行此操作,但我无法使用custom deserialization
找到相同的方法。如果Jackson annotations
属性位于animalType
或Cat
,但在我的情况下,其位置位于Dog
,则可以执行此操作。
有什么想法吗?
答案 0 :(得分:2)
您可以使用animal
为Zoo
中的JsonTypeInfo
字段添加注释,以便根据Dog
字段指定您想要的Cat
或animalType
个子类型也在Zoo
。棘手的一点是指定Animal
的特定类型将来自JSON中Animal
之外的属性,即EXTERNAL_PROPERTY
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXTERNAL_PROPERTY, property = "animalType")
@JsonSubTypes({
@JsonSubTypes.Type(value = Cat.class, name = "cat"),
@JsonSubTypes.Type(value = Dog.class, name = "dog")
})
private Animal animal;