基于属性子串的Jackson多态反序列化

问题描述 投票:0回答:1

考虑这个 JSON 数组:

[
   {
      "type": "xyz-foo",
      "info": {
         "name": "John",
         "age": 20,
         "company": "some company"
      }
   },
   {
      "type": "xyz-bar",
      "info": {
         "name": "Tom",
         "age": 10,
         "school": "some school"
      }
   }
]

我有一个像这样的POJO

class Pojo {
   private String type;
   
   @JsonTypeInfo(
            use = JsonTypeInfo.Id.NAME, property = "type",
            include = JsonTypeInfo.As.EXTERNAL_PROPERTY, visible = true)
    @JsonSubTypes(value = {@JsonSubTypes.Type(value = FooInfo.class, name = "foo"),
    @JsonSubTypes(value = {@JsonSubTypes.Type(value = BarInfo.class, name = "bar")})
   private Info info;
}

显然,这是行不通的,因为 type 既不是

foo
也不是
bar
。我收到一条错误消息

无法将类型 ID 'xyz-foo' 解析为

Info
的子类型:已知类型 ids = [foo, bar](对于 POJO 属性“info”)

有没有办法根据子串来匹配子类?

java jackson deserialization jackson-databind objectmapper
1个回答
0
投票

要解决此问题,您可以删除此注释

@JsonTypeInfo(...)

你的POJO

class Pojo {
   private String type;
   private Info info;

  // Getter & Setter
}

它会起作用的。让我知道

© www.soinside.com 2019 - 2024. All rights reserved.