猿问

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

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

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


牛魔王的故事
浏览 171回答 1
1回答

皈依舞

如果你想模拟一些fallback基于 - 的逻辑,你可以使用onErrorResume方法并将回退函数结果传递给下游。WebClient 会将不成功的结果视为错误,因此onErrorResume被称为。webClient.post() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.uri(myUri) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.headers(myHeaders) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.body(myBody) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.retrieve() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.bodyToMono(String.class) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.onErrorResume(error&nbsp;->&nbsp;...&nbsp;your&nbsp;fallback&nbsp;logic&nbsp;...)如果您只想执行一些副作用,并且希望保持错误通过反应流,您可以使用:webClient.post() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.uri(myUri) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.headers(myHeaders) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.body(myBody) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.retrieve() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.bodyToMono(String.class) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.doOnError(error&nbsp;->&nbsp;...&nbsp;your&nbsp;fallback&nbsp;logic&nbsp;...)
随时随地看视频慕课网APP

相关分类

Java
我要回答