在Spring Reactor Web应用程序中从flatMap中的subscription成功返回成功后如何返回?

时间:2018-12-07 06:52:41

标签: spring project-reactor

下面的代码可以正常编译:

@Override
public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
    ........

 .flatMap(user-> {
            userRepository.save(user).subscribe();
            return chain.filter(exchange);
  });

......

其返回类型为Mono(Void)的chain.filter(exchange)委托给链中的下一个Web过滤器。

但是我需要调用行return chain.filter(exchange);在成功完成userRepository.save之后,否则在下一个webfilter运行时它将无法保存用户。

我尝试了下面的代码,但它甚至没有编译。

.flatMap(user-> {
userRepository.save(user).subscribe(u -> chain.filter(exchange) );

}); 

如何解决此问题?

1 个答案:

答案 0 :(得分:1)

尝试一下:

return
...
.flatMap(userRepository::save)
.then(chain.filter(exchange));

1)将调用过滤器和userRepository组合到一个链中;

2)如果是userRepository::save引起的错误,则将停止发出数据并中止请求,否则then()将调用chain.filter(exchange)