Java Jackson继承与反序列化

Java Jackson继承与反序列化,java,inheritance,jackson,deserialization,polymorphism,Java,Inheritance,Jackson,Deserialization,Polymorphism,我正在SpringWebMVC/SpringHateoas之上编写一个API,即使简单类层次结构的反序列化非常有效,我也无法使用jackson将Json输入反序列化为正确的类型。 以下是我的类层次结构: public class A { protected String fieldA; } public class B extends A { protected String fieldB; } public class C extends A { protected

我正在SpringWebMVC/SpringHateoas之上编写一个API,即使简单类层次结构的反序列化非常有效,我也无法使用jackson将Json输入反序列化为正确的类型。 以下是我的类层次结构:

public class A {
    protected String fieldA;
}

public class B extends A {
    protected String fieldB;
}

public class C extends A {
    protected String fieldC;
}
在大家把我带到其他许多类似的问题之前,这里的主要区别是A是具体的。换句话说,Jackson必须通过使用json字段作为连接断路器在3种实现之间进行选择

基本上,我如何配置Jackson使其反序列化:

{
    "fieldA": "asdf"
} 
到一个实例,以及

{
    "fieldA": "asdf",
    "fieldB": "asdf"
} 

对于B的一个实例?

来说,没有办法自动完成:所有自动多态类型处理都依赖于某种类型的类型鉴别器(最常见的是类型属性)。已经要求能够使用基于内容的启发式,但到目前为止,还没有人提出一个可行的计划(或贡献)来实现这样的功能

要处理它,您可能需要编写一个自定义的
JsonDeserializer
并自己检测类型。可以先使用
ConvertingDeserializer
,让Jackson将JSON绑定到
JsonNode
java.util.Map
,然后自己提取