Java 具有多级多态类型层次结构的Jackson反序列化器

Java 具有多级多态类型层次结构的Jackson反序列化器,java,json,polymorphism,jackson,deserialization,Java,Json,Polymorphism,Jackson,Deserialization,似乎不支持此用例: @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "type") @JsonSubTypes({ @JsonSubTypes.Type(value=B1.class, name="b1"), @JsonSubTypes.Type(value=B2.class, name="b2") }) public abstract class A { ... } public class B1 extend

似乎不支持此用例:

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "type")
@JsonSubTypes({
    @JsonSubTypes.Type(value=B1.class, name="b1"),
    @JsonSubTypes.Type(value=B2.class, name="b2")
})
public abstract class A {
    ...
}

public class B1 extends A {
    ...
}

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "subtype")
@JsonSubTypes({
    @JsonSubTypes.Type(value=C1.class, name="c1"),
    @JsonSubTypes.Type(value=C2.class, name="c2")
})
public abstract class B2 extends A {
    ...
}

public class C1 extends B2 {
    ...
}

public class C2 extends B2 {
    ...
}
我想解决的是:{“类型”:“b1”…}到类b1,{“类型”:“b2”;“子类型”:“c1”;…}到类c1,{“类型”:“b2”;“子类型”:“c2”;…}到类c2。
有什么建议吗?

对于那些需要答案的人,OP得到了答案:

这是不受支持的


如果在类A注释中指定所有子类型,会发生什么?好吧,看看具体的类:B1、C1和C2。B1的“类型”属性等于“B1”,并且没有“子类型”属性。而C1和C2具有相同的“类型”属性和不同的“子类型”属性。如何通过在类A注释中指定所有子类型来实现这一点?是否同时需要类型和子类型?type=c1对于解marshalling来说是足够的信息。是的,type和subtype都在那里,我只是从一些不在我控制之下的东西反序列化,我无法更改接收到的消息的格式。