我有以下JSON
。而我使用的解析器Jackson
傑克遜反序列化具有未知屬性名稱的泛型
{
"code": 0,
"response": {
"pagination": {
"page": 1,
"limit": 20,
"count": 5,
"pageCount": 1
},
"random": [
....
]
}
}
現在我有各種random
對象創建簡單POJO
類解析它。我期望有3-4種不同類型的random
對象。因此,而不是針對不同類型的「隨機」對象的創建不同的包裝類我創建了一個通用的一個
EDITED類:
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
。
請幫
通用包裝工作正常,只要您在反序列化時傳遞非泛型類型(否則傑克遜不知道超出它的類型是java.lang.Object)。這可以通過傳遞TypeReference來完成,或者如果它是完全動態的,使用'TypeFactory.constructGenericType()'(或者其他確切的名稱)。但是,只要POJO存在「隨機」,您就不需要使用自定義解串器。 – StaxMan
非常感謝您幫助解決我以前的所有問題。我遵循你的建議並使用了'TypeReference'。已更新我的問題。 – vKashyap
到目前爲止好!這裏缺少的是什麼? – StaxMan