我正在使用杰克逊 1.9.x。坚持以动物为例,这就是我想做的事情:
假设我有一个 Animal 类:
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() 的实现)。
我看到的问题有解决方法吗?