2014-02-06 166 views
3

我写上了Spring Web MVC /春HATEOAS之上的API,即使简单的类层次结构的反序列化的工作就像一个魅力,我不能管理反序列化的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个实现。

基本上,我怎么可以配置杰克逊将它反序列化:

{ 
    "fieldA": "asdf" 
} 

到A的一个实例,

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

到B的一个实例?

回答

3

没有办法自动做到这一点:所有的自动多态类型的处理依赖于某种类型的区分(type属性,最常见的)。要求使用基于内容的启发式技术的能力,但迄今为止没有人提出实现这种功能的可行计划(或贡献)。

要处理它,你可能需要编写自定义JsonDeserializer并检测输入自己。这可能是可以使用ConvertingDeserializer,让杰克逊绑定JSON到JsonNodejava.util.Map第一,然后就自己解压。