杰克逊反序列化器具有多级多态类型层次结构

4

看起来这个使用案例是不被支持的:

@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 {
    ...
}

我希望能将这个进行解析: { "type": "b1"; ... } 转换成 B1 类,{ "type": "b2"; "subtype": "c1"; ... } 转换成 C1 类,{ "type": "b2"; "subtype": "c2"; ... } 转换成 C2 类。您有任何建议吗?

如果在 A 类注释中指定了所有子类型会发生什么? - Salil
好的,看一下具体的类:B1、C1和C2。B1的“type”属性等于“b1”,没有“subtype”属性。而C1和C2具有相同的“type”属性和不同的“subtype”属性。我该如何通过在A类注释中指定所有子类型来实现这一点? - user3129233
你需要类型和子类型吗?type=c1对于反序列化来说已经足够了。 - Salil
是的,类型和子类型都存在,我只是从一个不受我控制的东西进行反序列化,我无法更改接收到的消息的格式。 - user3129233
1个回答

1

对于需要答案的人,OP在这里找到了答案:

这不被支持。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接