Spring WebClient - Настроенный ответный обратный вызов на статус ошибки HTTP - PullRequest
1 голос
/ 07 мая 2019

Мне нужно сделать еще один HTTP-вызов в случае, если мой запрос WebClient получит ошибку HTTP 4xx или 5xx.

В настоящее время у меня есть следующее:

webClient.post()
         .uri(myUri)
         .headers(myHeaders)
         .body(myBody)
         .retrieve()
         .onStatus(HttpStatus::isError, responseStrategy::errorResponseCallback)
         ...

Мой ответный ответ об ошибкевыглядит следующим образом:

    public Mono<? extends Throwable> errorResponseCallback(ClientResponse clientResponse) {
        ... make ugly new HTTP request here 

        return Mono.error(...);
    }

Мне не нравится идея встраивания обработки ошибок в обратный вызов, который должен только возвращать Mono, содержащий исключение.

Какой правильный подходдля этой ситуации?

1 Ответ

1 голос
/ 07 мая 2019

Если вы хотите смоделировать некоторую логику на основе fallback, вы можете использовать метод onErrorResume, и результат функции отката будет передан в нисходящий поток.WebClient будет угрожать неуспешным результатам как ошибкам, поэтому вызывается onErrorResume.

webClient.post()
         .uri(myUri)
         .headers(myHeaders)
         .body(myBody)
         .retrieve()
         .bodyToMono(String.class)
         .onErrorResume(error -> ... your fallback logic ...)

В случае, если вы просто хотите выполнить какой-либо побочный эффект, и вы хотите сохранить ошибку, чтобы пройти черезреактивный поток, вы можете использовать:

webClient.post()
         .uri(myUri)
         .headers(myHeaders)
         .body(myBody)
         .retrieve()
         .bodyToMono(String.class)
         .doOnError(error -> ... your fallback logic ...)
...