java - 获取 Spring WebClient 请求的状态码
问题描述
我的目标是从 Spring WebClient 请求中获取 HttpStatus。请求的所有其他信息都无关紧要。
我这样做的旧方法是:
WebClient.builder().baseUrl("url").build()
.get().exchange().map(ClientResponse::statusCode).block();
在 Spring Boot 2.4.x/Spring 5.3 中,exchange
不推荐使用 WebClient 的方法,取而代之的是retrieve
.
在https://stackoverflow.com/a/65791800的帮助下,我设法创建了以下解决方案。
WebClient.builder().baseUrl("url").build()
.get().retrieve()
.toEntity(String.class)
.flatMap(entity -> Mono.just(entity.getStatusCode()))
.block();
但是,这看起来是一种非常“hacky”的方式,并且在收到 4xx 或 5xx 响应时不起作用(在这种情况下,结果为空)。
解决方案
这个问题可以用方法解决exchangeToMono
。这导致以下代码段。
WebClient.builder().baseUrl("url").build()
.get().exchangeToMono(response -> Mono.just(response.statusCode()))
.block();
该retrieve
方法的使用可以通过以下方式改进,仍然不是很干净。
WebClient.builder().baseUrl("url").build()
.get().retrieve()
.onStatus(httpStatus -> true, clientResponse -> {
//Set variable to return here
status.set(clientResponse.statusCode());
return null;
})
.toBodilessEntity().block();
推荐阅读
- c# - Npgsql AddWithValue 不适用于事务
- java - 环境变量和系统属性的区别
- python - Python - 通过列内的唯一指标复制行
- android - 无论如何配置 Android Studio Emulator 参数以启用应用程序测试?
- docker - Flowable-idm 无法提供对组的访问权限的访问权限
- c# - Google drive api v3 c# Uploadprogress trigger during file Upload
- c - Valgrind:大小为 1 的无效读取(strtok,atoi)
- matlab - matlab检查矩阵的索引
- c - C 编程语言练习 3-3
- ruby-on-rails - Rails 中 html 响应的响应格式和页面重新加载的清晰性