2 回答

TA貢獻1827條經驗 獲得超8個贊
您需要確保 jackson 知道將值反序列化到哪個類。在這種情況下,您要求 Jackson 將響應反序列化為 TypeReference ,默認情況下它將解析為 Map ,除非您指定類(在本例中為 AuthenticationResponse )。因此, Future 解析為 linkedHashMap 并導致類轉換。嘗試替換下面的行。
future.complete(IasClientJsonUtil.json2Pojo(bodyString, new TypeReference<T>() {}));
和
future.complete(IasClientJsonUtil.json2Pojo(bodyString, new TypeReference<AuthenticationResponse>() {}));

TA貢獻1821條經驗 獲得超5個贊
一種方法是將私有類類型變量添加到 BaseAsyncResult,然后在 json2Pojo 函數中使用該類,然后 BaseAsyncResult 可能如下所示:
public class BaseAsyncResult<T> {
private final CompletableFuture<T> future = new CompletableFuture<>();
private Class<T> classType;
public BaseAsyncResult(Class<T> classType) {
this.classType = classType;
}
public T getResult() {
try {
return future.get();
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
return null;
}
void onFailure(IOException e) {
future.completeExceptionally(e);
}
void onResponse(Response response) throws IOException {
future.complete(JacksonUtil.json2Pojo(response.body().string(), classType));
}
}
添加回答
舉報