获取 Spring WebClient 请求的状态代码
Get status code of Spring WebClient request
我的目标是从 Spring WebClient 请求中获取 HttpStatus。请求的所有其他信息均无关紧要。
我以前的做法是:
WebClient.builder().baseUrl("url").build()
.get().exchange().map(ClientResponse::statusCode).block();
使用 Spring Boot 2.4.x/Spring 5.3,WebClient 的 exchange
方法已弃用,取而代之的是 retrieve
.
在 的帮助下,我设法创建了以下解决方案。
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();
我的目标是从 Spring WebClient 请求中获取 HttpStatus。请求的所有其他信息均无关紧要。
我以前的做法是:
WebClient.builder().baseUrl("url").build()
.get().exchange().map(ClientResponse::statusCode).block();
使用 Spring Boot 2.4.x/Spring 5.3,WebClient 的 exchange
方法已弃用,取而代之的是 retrieve
.
在 的帮助下,我设法创建了以下解决方案。
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();