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