我已经创建了一个webclient来发出get请求,并专门处理404错误,我正在使用onstatus方法,如下面的代码片段所示。
client.get()
.uri(someUrl)
.headers(someHeaders)
.retrieve()
.onStatus(status -> status.equals(HttpStatus.NOT_FOUND), r -> Mono.empty())
.bodyToMono(MyJsonResponse.class)
当我在响应中得到404时,我的期望是它应该返回一个空的mono,然而,它也调用mono的后续body并尝试解析响应,理想情况下它不应该这样做。有什么建议吗?
2条答案
按热度按时间wgmfuz8q1#
最新的javadoc
onStatus
方法建议使用onErrorResume
或者filter
对于您的用例:要完全忽略错误响应,既不传播响应也不传播错误,请使用筛选器,或向下游添加onerrorresume,例如:
这的确是不久前Spring的一次行为改变。相关讨论:https://github.com/spring-projects/spring-framework/issues/24736
piv4azn72#
默认情况下,mono#empty将:
Create a Mono that completes without emitting any item.
意味着它将完成,然后执行将继续。就像你的情况一样去bodyToMono
. 如果你想忽略,你应该做一些类似的事情switchIfEmpty
然后继续挑选你想做的事情,或者返回一个Mono#error
使用onErrorContinue