我有一个Spring应用程序,它充当从一个应用程序到另一个应用程序的传递,发出http请求,并使用 final TcpClient tcpClient = TcpClient.create()
.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, connectionTimeout)
.doOnConnected(connection -> connection.addHandlerLast(new ReadTimeoutHandler(readTimeout))
.addHandlerLast(new WriteTimeoutHandler(writeTimeout)));
this.webClient = WebClient.builder()
.clientConnector(new ReactorClientHttpConnector(HttpClient.from(tcpClient)))
.defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)
.filter(logRequest())
.filter(logResponse())
.filter(errorHandler())
.build();
返回结果给调用者。如果客户端http调用返回500个内部服务器错误,则我希望能够捕获此错误并更新返回的对象,而不是重新引发该错误或炸毁该应用程序。
这是我的客户:
ResponseDto
这是我的错误处理程序。我已经在要修改结果的地方发表了评论,其中public static ExchangeFilterFunction errorHandler(){
return ExchangeFilterFunction.ofResponseProcessor(clientResponse -> {
ResponseDto resp = new ResponseDto();
if(nonNull(clientResponse.statusCode()) && clientResponse.statusCode().is5xxServerError()){
//this is where I want to modify the response
resp.setError("This is the error");
}
//not necessarily the correct return type here
return Mono.just(clientResponse);
});
}
是从客户端调用快乐路径返回的自定义对象
{{1}}
我该如何实现?我在文档中找不到任何教程或任何信息来帮助解释它。
免责声明,我是webflux的新手。我们只是开始研究反应式编程