如何解决Jackson JSON反序列化包装对象
我正在读取REST-API,该API以以下方式返回结果
{
"total": 2,"results": [
{
"name": "object-name","id": 123
},{
"name": "another-object-name","id": 321
}
]
}
除了属性name
和id
之外,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 举报,一经查实,本站将立刻删除。