【问题标题】:Spring WebClient - Customised response callback on HTTP error statusSpring WebClient - HTTP 错误状态的自定义响应回调
【发布时间】:2019-09-25 12:02:15
【问题描述】:

如果我的 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。

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

【问题讨论】:

    标签: java spring-boot callback webclient reactive


    【解决方案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 ...)
    

    【讨论】:

      猜你喜欢
      • 2021-12-14
      • 1970-01-01
      • 2017-03-30
      • 2014-12-01
      • 2021-02-24
      • 2013-08-10
      • 1970-01-01
      • 1970-01-01
      • 2019-01-07
      相关资源
      最近更新 更多