2017-06-19 101 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正是我一直在尋找。 –