java - Jackson用未知属性名称反序列化泛型

  显示原文与译文双语对照的内容
0 0

我有 JSON,我使用 Jackson 解析器解析它


 {
"code": 0,
"response": {
"pagination": {
"page": 1,
"limit": 20,
"count": 5,
"pageCount": 1
 },
"random": [
. . ..
 ]
 }
}

现在我为各种 random 对象创建了简单的POJO 类。 我期望 3 -4不同类型的random 对象。 因此,不是为不同类型的'随意'对象创建不同的包装类,而是创建了一个通用的类

编辑的类:


public class PaginatedResponse<E> {

 private Pagination pagination;
 private List<E> responseList;

 public Pagination getPagination() {
 return pagination;
 }

 public void setPagination(Pagination pagination) {
 this.pagination = pagination;
 }

 public List<E> getResponseList() {
 return responseList;
 }

 public void setResponseList(List<E> responseList) {
 this.responseList = responseList;
 }
}

我现在用的是地图


 JsonNode tree = mapper.readTree(response);
 TypeReference<PaginatedResponse<LocationParent>> ref = new TypeReference<PaginatedResponse<LocationParent>>() { };
 PaginatedResponse<LocationParent> resp = mapper.convertValue(tree.get("response"), ref);

但我不能把 responseList 。 我得到 pagination 对象,但 responseList 总是空的。 如何为 responseList 动态提供 property name

请帮助

时间: 原作者:

0 0

变量值类型所需的是处理多态类型。 泛型类型不能帮助,因为反序列化方不知道使用什么类型。

你可以使用注释 @JsonTypeInfo 启用多态类型处理;但是这个特殊情况下的问题是,由于类型擦除,你需要任意类型的东西;所有Java列表实际上都是 List<Object> ;没有元素类型。

如果是我,我可能会在基类中添加 PaginatedResponse,只是在基类中添加 @JsonTypeInfo,如下所示:


@JsonTypeInfo(...)//see javadocs for properties needed
public abstract class PaginatedResponse<T> {
 public Pagination pagination;
//.. and so on
}

public class PaginatedFooResponse<Foo> { }

这里使用of的原因只是让解串器可以找出元素类型,给出给定的响应对象类型。 响应对象将具有类型( PaginatedFooResposne ),并且从该类型的元素中可用。

原作者:
0 0

请尝试:


JSONObject objJSON = JSONObject.fromString("urString");

String code = objJSON.get("code");

原作者:
...