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