[英]Jackson deserialize generic with unknown property name
我有以下JSON
。 我正在使用Jackson
Parser進行解析
{
"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
始終為null。 現在如何動態地為responseList
提供property name
。
請幫忙
對於變量值類型,您需要處理多態類型。 僅泛型類型無濟於事,因為反序列化方面不知道要使用哪種類型。
您可以使用注解@JsonTypeInfo
啟用多態類型處理; 但是在這種特殊情況下的一個問題是您想要一個任意類型的事物的List
-由於類型擦除,所有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> { }
在這里使用子類的原因僅僅是為了使反序列化器能夠在給定響應對象類型的情況下找出元素類型。 響應對象的類型為( PaginatedFooResposne
),並且可以使用該類型的元素。
嘗試這個::
JSONObject objJSON = JSONObject.fromString("urString");
String code = objJSON.get("code");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.