如何使用 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 Content-Type Header?
使用 Spring Boot WebClient 时如何拦截请求