3 回答

TA貢獻(xiàn)1887條經(jīng)驗 獲得超5個贊
首先,讓方法返回T而不是Object:
public static <T> T getForEntity(...)
然后,實現(xiàn)它以返回一個 T。readValue返回正確的類,因為您傳入了Class<T>并且它的簽名也等同于public <T> T readValue(..., Class<T> clazz),所以您可以這樣做:
T obj = getResponseJsonMapper.readValue(getResponseJson, responseType);
return obj;

TA貢獻(xiàn)1802條經(jīng)驗 獲得超5個贊
您只需要傳遞一個Class<T>參數(shù)。
請注意,您不需要對readValue方法響應(yīng)進(jìn)行強制轉(zhuǎn)換,因為您已經(jīng)clazz作為參數(shù)傳遞,因此它返回一個clazz元素。
您的錯誤只是您將結(jié)果分配給了 Object 類型的對象。比退貨了。刪除不必要的賦值并直接從對 的調(diào)用結(jié)果中返回readValue。
public static <T> T getForEntity(String url, Class<T> clazz) throws InterruptedException,
ExecutionException, IOException {
Response getResponse = callWithHttpGet(url);
String getResponseJson = getResponse.getBody();
ObjectMapper getResponseJsonMapper = new ObjectMapper();
return getResponseJsonMapper.readValue(getResponseJson, clazz);
}

TA貢獻(xiàn)1883條經(jīng)驗 獲得超3個贊
使用 T 作為返回參數(shù)并進(jìn)行強制轉(zhuǎn)換(假設(shè)可以進(jìn)行強制轉(zhuǎn)換 - 否則會出現(xiàn)運行時異常)。
public static <T> T getForEntity(String url, Class<T> responseType) throws InterruptedException, ExecutionException, IOException{
Response getResponse = callWithHttpGet(url);
String getResponseJson = getResponse.getBody();
ObjectMapper getResponseJsonMapper = new ObjectMapper();
T obj = (T)getResponseJsonMapper.readValue(getResponseJson, responseType);
return obj;
}
而且在特定情況下,您甚至可以跳過演員表(如果 ObjectMapper 已經(jīng)返回正確的類型 - 例如杰克遜)。
添加回答
舉報