在我的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。
在这种情况下正确的方法是什么?
答案 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 ...)