2016-11-24 47 views
0

我有一個Zoo類,它可以包含不同類型的動物(Dog,...)並且具有用@JsonTypeId註釋的animalType。 Dog類反過來可以包含不同類型的皮帶(RopeLeash,...),並具有用@JsonTypeId註釋的leashType。當我用下面的方法序列化動物園類則leashType被設置animalType還有:Jackson:@JsonTypeId在嵌套時沒有正確序列化

String zooJson = objectMapper.writeValueAsString(zoo); 

輸出是:

{"animal":{"leash":{"leashColor":"RED"},"leashType":"ROPE"},"animalType":"ROPE"} 

類:

public class Zoo { 
    @JsonTypeId 
    private AnimalType animalType; 
    private Animal animal; 

    @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")     
     }) 
    public void setAnimal(Animal animal) { 
     this.animal = animal; 
    } 
    //Other getters and setters 
} 

public class Dog extends Animal { 
    @JsonTypeId 
    private LeashType leashType; 
    private Leash leash; 
    @JsonTypeInfo(
      use = JsonTypeInfo.Id.NAME, 
      include = JsonTypeInfo.As.EXTERNAL_PROPERTY, 
      property = "leashType" 
      ) 
    @JsonSubTypes({ 
     @JsonSubTypes.Type(value = RopeLeash.class, name = "ROPE")     
     }) 
    public void setLeash(Leash leash) { 
     this.leash = leash; 
    } 
    //Other getters and setters 
} 

public class RopeLeash extends Leash { 
    private String leashColor; 
    //Getter and setter for leashColor 
} 

有什麼錯我的註釋用法?

回答