java – 杰克逊多态:如何将多个子类型映射到同一个类

我正在使用Jackson 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"},name = "Cockatoo"})
public class Animal {

}

我现在看到的是,杰克逊只会认识到“狗到哺乳动物”和“Dodo-to-Bird”映射.这是因为StdSubtypeResolver._collectAndResolve()只允许同一个注册一次(由于NamedType.equals()的实现).

有没有解决我看到的问题的解决方法

解决方法

也许不是使用注释.问题来自于这种映射对于序列化不起作用,而现有映射确实需要一对一(双向)关系.
但您可能想要在 jackson-databind issue tracker提交RFE;添加支持可能是可能的.

相关文章

最近看了一下学习资料,感觉进制转换其实还是挺有意思的,尤...
/*HashSet 基本操作 * --set:元素是无序的,存入和取出顺序不...
/*list 基本操作 * * List a=new List(); * 增 * a.add(inde...
/* * 内部类 * */ 1 class OutClass{ 2 //定义外部类的成员变...
集合的操作Iterator、Collection、Set和HashSet关系Iterator...
接口中常量的修饰关键字:public,static,final(常量)函数...