繁体   English   中英

杰克逊继承和反序列化

[英]Jackson inheritance and deserialization

我正在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是具体的 换句话说,杰克逊必须通过使用json字段作为断路器来选择3种实现方式。

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

{
    "fieldA": "asdf"
} 

到A的实例,和

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

到B的一个例子?

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

要处理它,您可能需要自己编写一个自定义JsonDeserializer并检测类型。 也许可以使用ConvertingDeserializer ,让Jackson首先将JSON绑定到JsonNodejava.util.Map ,然后自己解压缩。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM