我有一个Zoo类,它可以包含不同类型的动物(Dog,...),并且有一个用@JsonTypeId注释的animalType。 Dog类又可以包含不同类型的皮带(RopeLeash,...),并且使用@JsonTypeId注释leashType。当我使用下面的方法序列化Zoo类时,leshType也为animalType设置:
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
}
我的注释用法有问题吗?
答案 0 :(得分:0)
杰克逊似乎不支持多级ID。在杰克逊网站上发布了这个问题,这是回复:
不支持多级类型ID;需要一个id。没有 计划使用多级支持。
链接:https://github.com/FasterXML/jackson-databind/issues/1462