Spring 5 Webclient处理500错误并修改响应

时间:2019-01-25 19:45:23

标签: java spring-boot spring-webflux

我有一个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的新手。我们只是开始研究反应式编程

0 个答案:

没有答案