Java 当从另一个Mono内部返回时,如何避免中断WebFilter中的请求流<;对象>>;?

Java 当从另一个Mono内部返回时,如何避免中断WebFilter中的请求流<;对象>>;?,java,spring-boot,reactive-programming,spring-webflux,Java,Spring Boot,Reactive Programming,Spring Webflux,例如,这里有一些荒谬的代码 @Component public final class ReCaptchaCheckWebFilter implements WebFilter { @Override public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) { return Mono.just("foo").map(s -> chain.filter

例如,这里有一些荒谬的代码

@Component
public final class ReCaptchaCheckWebFilter implements WebFilter {
  @Override
  public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
    return Mono.just("foo").map(s -> chain.filter(exchange)).then();
  }
}
@组件
公共最终类ReCaptchaCheckWebFilter实现WebFilter{
@凌驾
公共Mono筛选器(服务器WebExchange exchange、WebFilterChain链){
返回Mono.just(“foo”).map(s->chain.filter(exchange)).then();
}
}
使用此webfiler,请求永远不会到达我的控制器。它确实返回一个200 http状态码


如果我发现自己需要从另一个Mono内部返回,那么在沿着筛选器链将请求转发到控制器上时,我该如何做?

链。筛选器
返回Mono,但在您的示例中,它不是流的一部分(没有订阅它)。要解决这个问题,请使用should-use方法


chain.filter
返回一个Mono,但在您的示例中,它不是流的一部分(没有订阅它)。要解决这个问题,请使用should-use方法


这是答案,但你能进一步解释一下吗?我已经读到,
.map()
是同步的,而
.flatMap()
是异步的,但不知道为什么这在这里很重要。你是说如果我按照我的
.map()
使用
.subscribe*()
,它会工作吗?不,在webflux应用程序中,你应该(几乎)永远不要使用
subscribe
方法,但你应该记住,Mono/Flux在没有订阅的情况下不会执行(就像创建线程而不启动它一样)。请检查此答案以了解更多详细信息。这是答案,但您能帮助进一步解释吗?我已经读到,
.map()
是同步的,而
.flatMap()
是异步的,但不知道为什么这在这里很重要。你是说如果我按照我的
.map()
使用
.subscribe*()
,它会工作吗?不,在webflux应用程序中,你应该(几乎)永远不要使用
subscribe
方法,但你应该记住,Mono/Flux在没有订阅的情况下不会执行(就像创建线程而不启动它一样)。请检查此答案以了解更多详细信息
    return Mono.just("foo").flatMap(s -> chain.filter(exchange));