没有字段的杰克逊多态反序列化

时间:2016-11-25 10:06:51

标签: java json serialization jackson deserialization

我能够在jackson中尝试简单的多态反序列化案例。

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY,
  property = "type", visible = true)
@JsonSubTypes({
@Type(value = A.class, name = "a"),
@Type(value = B.class, name = "b")
})
Class Base {
  private String type;
...
}

Class A extends Base {
...
}

Class B extends Base {
...
}

但我面临的是我对传入的Json无法控制的地方。 json看起来像

{ "type" : a, "params" : { .. fields for type A .. } }

{ "type" : b, "params" : { .. fields for type B .. } }

params字段可以是A或B类型。 AB都来自Base,但决定type的列位于params字段之外。

如何配置jackson以查看班级外的字段,然后确定实际类型

1 个答案:

答案 0 :(得分:1)

找到答案 Java: Jackson polymorphic JSON deserialization of an object with an interface property?

我们需要将注释放在使用外部属性

反序列化的变量上
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXTERNAL_PROPERTY,
    property = "type")
@JsonSubTypes({
    @Type(value = A.class, name = "a"),
    @Type(value = B.class, name = "b") 
})