Spring webflux 5.2.3 bodyToMono 在 onStatus 中的空 Mono 之后调用

德拉吉·赖辛哈尼

我创建了一个 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方法建议使用onErrorResumefilter为您的使用情况:

要完全忽略错误响应,并且既不传播响应也不传播错误,请使用过滤器,或在下游添加 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在 Spring Webclient 中调用 onStatus() 内部的方法

Spring webflux 中的 void 与 Mono<Void>

从Spring WebFlux Web应用程序中的WebClient调用中缓存Mono的结果

在Spring 5中缓存WebFlux

Spring webflux 与 Mono 对象交互

在Spring Webflux中的Mono <Response <T >>中转换Flux <T>

在 Spring webflux 中抛出异常 vs Mono.error()

如何在Spring WebFlux中整合Mono Objects的结果?

webflux Mono响应为空

Java Spring Webflux - WebClient .onStatus((HttpStatus::isError) 返回错误处理

如何在Spring WebClient构建器实例中设置onStatus

春季5 WebFlux Mono和Flux

Spring webflux 反应式 Mono::subscribe

我的Spring webflux flatMap,doOnNext,doFinally不会被内部Mono调用吗?

webflux Mono <T> onErrorReturn不被调用

Spring WebFlux-通过WebClient为Mono内列表中的每个元素发送HTTP请求

如何在Spring Webflux中返回Mono <Map <String,Flux <Integer >>>响应?

@RequestBody是否应该在Spring Webflux中与Mono Publisher一起包装?

Spring WebFlux中的ReactiveSecurityContextHolder为空

Spring 5 Reactive Mono-将Mono值传递给对象的属性并调用另一个Mono

使用 Spring WebFlux 為 Mono<Entity> 添加值

Spring WebFlux - 如何返回与 Mono 源不同的类型?

Spring WebFlux WebClient挂起,Mono.timeout无法捕获它

Spring集成中如何重试对Webflux.outboundgateway的失败调用

如何使用 WebFlux 在 Spring Boot 2 中设置登录页面?

Spring Webflux:控制器返回 Mono<ResponseEntity<MyPojo>> 与 Mono<MyPojo>

在Spring Webfux中压缩2个不同的Mono

serverRequest 中的正文为空,带有 ServerRequest(Spring Webflux)

Webflux链接多个Mono