2017-06-19 99 views
1

假设我们有以下几种类型:杰克逊多态性反序列化使用注释

interface Animal {} 
class Dog implements Animal {...} 
class Cat implements Animal {...} 
class Zoo { 
    private String animalType; 
    private Animal animal; 
    ... 
} 

有了这样的CatDog有不同的特性,我们怎么可以反序列化Zoo对象基于animalType串合适的动物亚型总是存在于json?我知道如何做到这一点custom deserialization,但我找不到使用Jackson annotations做同样的事情。如果animalType属性位于CatDog,但在我的情况下,它的位置在Zoo

有什么想法?

回答

2

您可以注释animalZooJsonTypeInfo指定要DogCatanimalType领域也Zoo其中亚型。棘手位是指定的Animal的具体类型将来自财产的Animal之外的JSON即一个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; 
+0

谢谢JsonTypeInfo.As.EXTERNAL_PROPERTY正是我一直在寻找。 –