Spring 5 Webclient Handle 500 error и модифицирует ответ - PullRequest
0 голосов
/ 25 января 2019

У меня есть приложение Spring, выполняющее роль прохода от одного приложения к другому, отправляющее запрос http и возвращающее результат вызывающей стороне с помощью WebClient. Если клиентский HTTP-вызов возвращает внутреннюю ошибку сервера 500, я хочу иметь возможность отловить эту ошибку и обновить возвращаемый объект, а не повторно выдавать ошибку или взрывать приложение.

Это мой клиент:

 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();

А это мой обработчик ошибок. Я прокомментировал, где я хочу изменить результат, где ResponseDto - это пользовательский объект, который возвращается из клиентского вызова happy path

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);
});
}

Как мне этого добиться? Я не могу найти учебники или какую-либо информацию в документах, чтобы помочь объяснить это.

Отказ от ответственности, я новичок в webflux. Мы только начинаем смотреть на реактивное программирование

...