编程语言
首页 > 编程语言> > java-Jackson继承和反序列化

java-Jackson继承和反序列化

作者:互联网

我在Spring Web MVC / Spring Hateoas之上编写了一个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;
}

在所有人都向我发送关于SO的许多其他类似问题之前,这里的主要区别是A是具体的.换句话说,Jackson必须使用json字段作为决胜局,在3种实现之间进行选择.

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

{
    "fieldA": "asdf"
} 

到A的实例,并且

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

到B的实例?

解决方法:

无法自动执行此操作:所有自动多态类型处理都依赖某种类型的类型识别符(最常见的是type属性).人们已经要求能够使用基于内容的启发式技术,但是到目前为止,还没有人提出实现这种功能的可行计划(或贡献).

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

标签:polymorphism,inheritance,jackson,deserialization,java
来源: https://codeday.me/bug/20191122/2057424.html