我正在使用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
?
ReactoronError***
为此提供了多个运算符:
return webClient.get()
.uri("http://localhost:8081/resource")
.retrieve()
.onErrorResume(ex -> Mono.empty())
.onStatus(HttpStatus::isError, clientResponse -> {
// Some logging..
return Mono.empty();
})
.bodyToMono(MyPojo.class);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句