如何使用 WebClient 执行同步请求?

Posted

技术标签:

【中文标题】如何使用 WebClient 执行同步请求?【英文标题】:How to use WebClient to execute synchronous request? 【发布时间】:2020-03-04 03:54:50 【问题描述】:

Spring 文档指出我们必须从 RestTemplate 切换到 WebClient,即使我们想要执行同步 http 调用。

现在我有以下代码:

  Mono<ResponseEntity<PdResponseDto>> responseEntityMono = webClient.post()
                .bodyValue(myDto)
                .retrieve()
                .toEntity(MyDto.class);
        responseEntityMono.subscribe(resp -> log.info("Response is ", resp));
   //I have to return response here
   // return resp;

当然我可以在这里使用 CountdownLatch,但它看起来像 API 滥用。

如何执行同步请求?

【问题讨论】:

你有一个链接,上面写着:“从 RestTemplate 切换到 WebClient”? @Ivan Lymar,当然:docs.spring.io/spring-framework/docs/current/javadoc-api/org/… 【参考方案1】:

有效:

webClient.post()
         .bodyValue(myDto)
         .retrieve()
         .toEntity(MyDto.class)
         .block(); // <-- This line makes trick

【讨论】:

同步请求意味着阻塞,所以你已经提到,你添加 juste block() @g*** 在调用 block() 方法后,你是如何得到你的 resp 值的? @AM .block() 返回响应 如何进行同步调用并获取响应码?

以上是关于如何使用 WebClient 执行同步请求?的主要内容,如果未能解决你的问题,请参考以下文章

使用带有阻塞/同步请求的 Spring WebClient 使用 try/catch 捕获异常

WebClient - 如何获取请求正文?

如何设置 WebClient Content-Type Header?

使用 Spring Boot WebClient 时如何拦截请求

如何使用 WebClient 反应式 Web 客户端发送带有 zip 正文的 POST 请求

Spring WebFlux WebClient - 如何解决 400 错误请求