Java Jackson继承与反序列化
我正在SpringWebMVC/SpringHateoas之上编写一个API,即使简单类层次结构的反序列化非常有效,我也无法使用jackson将Json输入反序列化为正确的类型。 以下是我的类层次结构: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
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
,然后自己提取