Jackson自定义属性 - 多态属性的类型映射名称

joe*_*cks 3 java jackson

我试图反序列化一个相当复杂的POJO JSON,我需要在其中定义一个特定的属性名称来进行类型解析,但是找不到这个相当简单的功能.

假设一个类如下:

class Example {
  int id;
  Map<String,Object> extras;
}
Run Code Online (Sandbox Code Playgroud)

和Jackson正确地将POJO序列化为JSON,其中地图被序列化为键值映射,就像预期的那样:

{...
id:5,
extras:{object1:{...}, object2:{...}}
...}
Run Code Online (Sandbox Code Playgroud)

现在我想告诉杰克逊根据实际类型明确地反序列化附加对象.所以我需要告诉Jackson以某种方式将"object1"映射到Type A,将"object2"映射到B型.

这可能吗?谢谢.

paw*_*eba 7

有一个很好的指南如何处理它:http://www.cowtowncoder.com/blog/archives/2010/03/entry_372.html

另一个教程:http:
//programmerbruce.blogspot.de/2011/05/deserialize-json-with-jackson-into.html

可以修改第二个教程中的第6个示例,并且反序列化器将具有类似于以下内容的循环:

Map<String, Class> types = ...// map of supported types
JsonToken token = jsonParser.nextToken();
if(token == JsonToken.FIELD_NAME){ // "object1" etc.
    String name = jsonParser.getCurrentName();
    Class type = types.get(name);
    Object object = jsonParser.readValueAs(type);
}
Run Code Online (Sandbox Code Playgroud)