如何使用 Spring 的响应式 WebClient
发布 Flux<String>
作为 JSON 数组?
Flux<String> stringFlux = Flux.fromIterable(objects).map(MyObject::getSomeString);
WebClient.create(baseUrl)
.post()
.uri(myUrl)
.contentType(MediaType.APPLICATION_JSON)
.body(stringFlux, String.class)
.exchange()
.flatMap(response -> {
if (response.statusCode().is2xxSuccessful()) {
// Do something
}
return response.bodyToMono(Void.class);
})
.block();
这会发送请求,但不会将其作为 JSON 字符串数组发送。
我看到还有一个body()
接受 ParameterizedTypeReference
的签名,所以我尝试了这个:
.body(stringFlux.collectList(), new ParameterizedTypeReference<>() {})
但这实际上会导致编译错误(我使用的是 Java 11):
Error:java: com.sun.tools.javac.code.Types$FunctionDescriptorLookupError
.
有什么想法吗?
最佳答案
好吧,我会被诅咒的。我使用 ParameterizedTypeReference
让它工作。与通常的情况一样,编译错误总结了这一点。我在声明 new ParameterizedTypeReference<>() {}
时省略了类型参数。提供类型就可以了,并发布了我的 Flux<String>
作为 JSON 数组:
.body(stringFlux.collectList(), new ParameterizedTypeReference<List<String>>() {})
IntelliJ 告诉我这种类型是推断出来的,但显然不是。
关于java - 如何使用 Spring 的 WebClient 将 Flux<String> 作为 JSON 数组进行 HTTP POST?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54187276/