用Jackson进行多态反序列化,而“类型”和“值”是分开的字段

时间:2019-10-20 16:08:54

标签: java json jackson polymorphism deserialization

API返回以下JSON:

"objectA":{
  "type":"typeA",
  "value":{
    "propertyA":{
      "propertyAA":"3000",
      "propertyAB":3
    },
    "propertyB":10
  }
}

“类型”可以是各种各样的类,而“值”字段包含该对象的属性。杰克逊提供了一种开箱即用的基于注释的解决方案吗?

在API提供者进行最后一次更新之前,API返回了:

  

“ objectA”:{“ type”:“ typeA”,“ propertyA”:{“ propertyAA”:“ 3000”,“ propertyAB”:3},“ propertyB”:10}

我可以使用以下方式进行解析:

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type")
@JsonSubTypes({ @Type(value = TypeA.class, name = "typeA"),
[...]

如上所述,我想知道是否存在允许同时配置包含类型的字段和包含实际对象的字段的Jackson配置。

非常感谢您!

1 个答案:

答案 0 :(得分:0)

我通过引入一个处理“类型”和“值”字段的包装对象暂时解决了这个问题。对于“值”字段,我使用了“ EXTERNAL_PROPERTY”方法,如下所示:Jackson JsonTypeInfo.As.EXTERNAL_PROPERTY doesn't work as expected

有效,但仍然感觉不是很干净:(因此,如果有人知道更好的方法,请分享!:)