Spring WebClient - 针对 HTTP 错误状态的自定义响应回调

Spring WebClient - Customised response callback on HTTP error status

如果我的 WebClient 请求收到 HTTP 4xx 或 5xx 错误,我需要进行另一个 HTTP 调用。

目前我有:

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

我不喜欢在回调中嵌入错误处理的想法,它只应该 return 一个包含异常的 Mono。

对于这种情况,正确的做法是什么?

如果你想模拟一些基于fallback的逻辑,你可以使用onErrorResume方法,回退函数结果将传递给下游。 WebClient 将威胁 non-successful 结果作为错误,因此调用 onErrorResume

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

如果您只想执行一些 side-effect,并且希望保留错误以通过反应流,您可以使用:

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