Spring 带有 ParameterizedTypeReference 的 WebClient 不工作
Spring WebClient with ParameterizedTypeReference doesn't work
我有一个 Spring 引导应用程序,我正在使用 WebClient 向 API 发出请求 returns 以下格式 {"results": {...}}
中的对象results
字段可以有多种不同的格式。我创建了以下 class 来存储 API 响应。
@Data
@Jacksonized
@Builder
public class ApiResponse<T> {
private T results;
}
当我调用以下方法时:
public MyResClass makeApiCall(String URI) {
ApiResponse<MyResClass> response = webClient.get()
.uri(URI)
.accept(MediaType.APPLICATION_JSON)
.retrieve()
.bodyToMono(new ParameterizedTypeReference<ApiResponse<MyResClass>>() {})
.block();
return response.getResults();
}
a java.lang.ClassCastException
随消息一起抛出:“class java.util.LinkedHashMap 无法转换为 class MyResClass”
删除 @Builder
和 @Jacksonized
注释并重复测试,没有它们似乎工作正常。
P.S。请注意 block()
调用,如果此代码恰好在非阻塞线程上执行,则可能会抛出各种错误!
我有一个 Spring 引导应用程序,我正在使用 WebClient 向 API 发出请求 returns 以下格式 {"results": {...}}
中的对象results
字段可以有多种不同的格式。我创建了以下 class 来存储 API 响应。
@Data
@Jacksonized
@Builder
public class ApiResponse<T> {
private T results;
}
当我调用以下方法时:
public MyResClass makeApiCall(String URI) {
ApiResponse<MyResClass> response = webClient.get()
.uri(URI)
.accept(MediaType.APPLICATION_JSON)
.retrieve()
.bodyToMono(new ParameterizedTypeReference<ApiResponse<MyResClass>>() {})
.block();
return response.getResults();
}
a java.lang.ClassCastException
随消息一起抛出:“class java.util.LinkedHashMap 无法转换为 class MyResClass”
删除 @Builder
和 @Jacksonized
注释并重复测试,没有它们似乎工作正常。
P.S。请注意 block()
调用,如果此代码恰好在非阻塞线程上执行,则可能会抛出各种错误!