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

时间:2019-05-07 19:13:41

标签: java spring-boot callback webclient reactive

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

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

在这种情况下正确的方法是什么?

1 个答案:

答案 0 :(得分:1)

如果要模拟某些基于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 ...)