我正在 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 的一个实例?
最佳答案
没有办法自动做到这一点:所有自动多态类型处理都依赖于某种类型鉴别器(类型属性,最常见)。已要求能够使用基于内容的启发式方法,但到目前为止,还没有人提出可行的计划(或贡献)来实现此类功能。
要处理它,您可能需要编写自定义 JsonDeserializer
并自行检测类型。可以使用ConvertingDeserializer
,让Jackson先将JSON绑定(bind)到JsonNode
或java.util.Map
,然后自己解压.
关于java - jackson 继承和反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21605594/