首页 > 解决方案 > 没有类型信息的杰克逊多态反序列化

问题描述

我有代表对象类型特殊情况的 json 对象:

interface X {
   Map<String, Object> extraInfo;
}

子类如下:

class Y implements X {
  String foo;
}

class Z implements X {
  String bar;
}

基本上,子类是根据 json 对象中的属性名称 foo 和 bar 来区分的。如何配置杰克逊以反序列化这些对象?

我尝试了以下方法,但它不起作用:

@JsonSubTypes({@JsonSubTypes.Type(value = Y.class),
           @JsonSubTypes.Type(value = Z.class)})
interface X {
  Map<String, Object> extraInfo;
}

@Getter
class Y implements X {
  public Y(@JsonProperty(value="foo") String foo) {
    this.foo = foo;
  }
  String foo;
}


@Getter
class Z implements X {
  public Z(@JsonProperty(value="bar") String bar) {
    this.bar = bar;
  }
  String bar;
}

有人可以指出我在这里缺少什么吗?

标签: javajsonjacksonjackson-databind

解决方案


推荐阅读