我正在使用 Spring WebFlux webclient 进行 REST 调用。我已经以3000
毫秒为单位配置了连接超时,因此:
WebClient webClient = WebClient.builder()
.clientConnector(new ReactorClientHttpConnector(options -> options
.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 3000)))
.build();
return webClient.get()
.uri("http://localhost:8081/resource")
.retrieve()
.onStatus(HttpStatus::isError, clientResponse -> {
// Some logging..
return Mono.empty();
})
.bodyToMono(MyPojo.class);
该onStatus
方法Mono
为每个400
/500
响应代码返回一个空。我怎样才能对连接超时甚至读/写超时做同样的事情。现在它只是抛出一个io.netty.channel.ConnectTimeoutException
不由onStatus
我的控制器上不需要一个@ExceptionHandler
,因为这些 REST 调用是更复杂流程的一部分,并且通过一个空Mono
的元素应该被忽略。
回来spring-web
用了一个RestTemplate
,我记得连接超时也导致了一个RestClientException
。所以我们可以捕获RestClientException
所有异常和超时。有没有办法我们也可以做到这一点WebClient
?