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));