java - 如何使用 Spring 的 WebClient 将 Flux<String> 作为 JSON 数组进行 HTTP POST?

标签 java spring-webflux project-reactor

如何使用 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/

相关文章:

java - 每 3 秒轮询一次 MongoDB

java - 在 Oauth2 安全(客户端凭据)资源服务器应用程序中为 WebFluxTest 获取 403 Forbidden Forbidden

java - 如何在 Java 中的某个时间后停止执行 Flux?

java - 如何捕获 react 流取消信号?

java - 错误 "actual and format arguments lists differ in length"

java - Eclipse插件: How to add items to a TableViewer asynchronously?

java - 嵌套的 webflux 路由总是和最上面的路由一起走

java - 如何覆盖任何 HttpHeader 以响应 WebClient?

java - R2DBC 数据库客户端未调用 doOnSuccess 或因嵌套调用而终止

java - 在 LWJGL 中使用 Slick 的 Unicodefont 绘制字符串