我创建了一个 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 时,我的期望是它应该返回一个空的单声道,但是,它也将后续主体调用为单声道并尝试解析响应,理想情况下它不应该这样做。有什么建议么 ?
最新的javadoc的的onStatus
方法建议使用onErrorResume
或filter
为您的使用情况:
要完全忽略错误响应,并且既不传播响应也不传播错误,请使用过滤器,或在下游添加 onErrorResume,例如:
webClient.get()
.uri("https://example.com/account/123")
.retrieve()
.bodyToMono(Account.class)
.onErrorResume(WebClientResponseException.class,
ex -> ex.getRawStatusCode() == 404 ? Mono.empty() : Mono.error(ex));
这确实是不久前 Spring 的行为改变。相关讨论:https : //github.com/spring-projects/spring-framework/issues/24736
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句