將泛型類作爲方法的泛型參數f.e.有問題。我有一個簡單的方法:如何將泛型類作爲方法的通用參數傳遞
<T> T sendRequest(SomeRestApiRequest request, Class<T> responseClass)
哪些分析對指定表單的響應。我使用它們以這種方式:
ItemListJSON itemList = new ItemListJSON();
itemList = someRestClient.sendRequest(req, ItemListJSON.class);
爲ItemListJSON.class它看起來像:
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({"totalSize","items"})
public class ItemListJSON {
@JsonProperty("items")
private List<SalonJSON> items;
@JsonProperty("totalSize")
private int totalSize;
//...getters, setters...
}
,一切都很好。但我的問題是:
是否有可能通過泛型類作爲參數sendRequest方法?
我想這ItemListJSON類是通用的,在我的情況:
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({"totalSize","items"})
public class ItemListJSON<T> {
@JsonProperty("items")
private List<T> items;
@JsonProperty("totalSize")
private int totalSize;
//...getters, setters...
}
但是當我試圖用這種方式sendRequest將方法:
ItemListJSON<SalonJSON> itemList = new ItemListJSON<SalonJSON>();
itemList = someRestClient.sendRequest(req, ItemListJSON.class);
我得到了Eclipse的警告IDE
類型安全性:類型It emListJSON選中需要轉換 符合ItemListJSON
,當方法被稱爲我有在服務器控制檯錯誤:
SEVERE: Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to xxx.ServiceCategoryJSON] with root cause
java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to xxx.ServiceCategoryJSON
@EDIT:
我debbuged我sendRequest將方法和我發現在processResponse方法中發生錯誤,其中通過ObjectMapper映射對對象的響應。
private <T> T processResponse(Response response, Class<T> responseClass) throws ParseException, IOException {
ObjectMapper om = new ObjectMapper();
om.enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY);
return om.readValue(response.getBody(), responseClass); //throw exception
}
顯示'ŤsendRequest將主體(SomeRestApiRequest請求,類 responseClass)' –
isah
@isah我修改後以示出異常被拋出。 –
什麼是JSON響應作爲字符串,'response.getBody()'(字符串化)? – isah