Jackson JSON反序列化包装对象

问题描述

我正在读取REST-API,该API以以下方式返回结果

{
  "total": 2,"results": [
    {
      "name": "object-name","id": 123
    },{
      "name": "another-object-name","id": 321
    }
  ]
}

除了属性nameid之外,results的元素还包括其他属性,具体取决于对象类型。 results中的所有对象都是同一类型。没有属性指示元素是什么对象类型。

我正在使用Apache Beam,并且正在将Autovalue与Jacksonjson一起使用来解析这些对象。例如,对象Circle如下所示:

@JsonDeserialize(builder = Autovalue_Circle.Builder.class)
@Autovalue
public abstract class Circle implements Serializable {

  public static Circle.Builder builder() {
    return Circle.Builder.builder();
  }

  @JsonProperty("name")
  public abstract String name();

  @JsonProperty("id")
  public abstract int id();

  @JsonProperty("radius")
  public abstract double radius();

  @JsonPOJOBuilder(buildMethodName = "build")
  @Autovalue.Builder
  public abstract static class Builder {

    @JsonCreator
    public static Builder builder() {
      return new Autovalue_Circle.Builder();
    }

    @JsonProperty("name")
    abstract Builder name(String name);

    @JsonProperty("id")
    abstract Builder id(int id);

    @JsonProperty("radius")
    abstract Builder radius(double radius);

    abstract Circle build();
  }
}

我知道results中包含什么类型。例如,从/api/circles发出GET请求将返回一个圈子列表。

我正在使用Apache Beam管道来处理此问题:

// jsonData is a PCollection<String>,which holds JSONs
PCollection<ApiWrapperObj> data = jsonData.apply(ParseJsons.of(ApiWrapperObj.class).setCoder(SerializableCoder.of(ApiWrapperObj.class));

所以我需要为包装对象创建一个反序列化器。我有办法使用通用类吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)