杰克逊多态性:如何将多个子类型映射到同一类
我使用的是 Jackson 1.9.x。坚持以动物为例,这是我想做的:
假设我有一个动物类:
public class Animal {
private String type;
// accessors
}
public class Mammal extends Animal {
private String diet;
// accessors
}
public class Bird extends Animal {
private boolean tropical;
// accessors
}
我希望能够做这样的事情(我将几个子类型映射到一个类,并将几个子类型映射到另一个类):
@JsonTypeInfo(use = Id.NAME, include = As.PROPERTY, property = "type")
@JsonSubTypes({@JsonSubTypes.Type(value = Mammal.class, name = "Dog"),
@JsonSubTypes.Type(value = Mammal.class, name = "Cat"),
@JsonSubTypes.Type(value = Bird.class, name = "Dodo"},
@JsonSubTypes.Type(value = Bird.class, name = "Cockatoo"})
public class Animal {
}
我现在看到的是,杰克逊只会识别狗到哺乳动物和渡渡鸟到鸟的映射。这是因为StdSubtypeResolver._collectAndResolve() 只允许同一类注册一次(由于 NamedType.equals()的实现)。
对于我看到的问题,是否有解决方法?