gpt4 book ai didi

java - 返回 OkHttp 异步结果有问题

转载 作者:行者123 更新时间:2023-12-02 02:45:38 26 4
gpt4 key购买 nike

我有一个java SDK,它使用OkHttp客户端(4.0.0)从IAM获取 token > 服务器并返回token给应用程序。关系可能是这样的:应用程序同步调用SDKSDK异步调用IAM。引用这个答案Java - Retrieving Result from OkHttp Asynchronous GET ,代码如下:

异步类:

class BaseAsyncResult<T> {
private final CompletableFuture<T> future = new CompletableFuture<>();

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 {
String bodyString = Objects.requireNonNull(response.body()).string();
future.complete(IasClientJsonUtil.json2Pojo(bodyString, new TypeReference<T>() {}));
}
}

Okhttp 调用如下:

public void invoke(Request request, BaseAsyncResult result) {
okHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(@NotNull Call call, @NotNull IOException e) {
result.onFailure(e);
}

@Override
public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
result.onResponse(response);
}
});
}

应用程序使用 sdk 代码,例如,iasClient 是 okhttp 客户端的包装器:

 BaseAsyncResult<AuthenticationResponse> iasAsyncResult = new BaseAsyncResult();
iasClient.invoke(request, iasAsyncResult);
AuthenticationResponse result = iasAsyncResult.getResult();

错误消息:

java.lang.ClassCastException:java.util.LinkedHashMap 无法转换为 x.x.x.AuthenticationResponse

我错过了什么?

最佳答案

您需要确保 jackson 知道将值反序列化到哪个类。在本例中,您要求 Jackson 反序列化对 TypeReference 的响应,默认情况下它将解析为 Map ,除非您指定类(在本例中为 AuthenticationResponse )。因此,Future 解析为 linkedHashMap 并导致类转换。尝试替换下面的行。

future.complete(IasClientJsonUtil.json2Pojo(bodyString, new TypeReference<T>() {}));

future.complete(IasClientJsonUtil.json2Pojo(bodyString, new TypeReference<AuthenticationResponse>() {}));

关于java - 返回 OkHttp 异步结果有问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57147132/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com