下面的代码可以正常编译:
@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) );
});
如何解决此问题?
答案 0 :(得分:1)
尝试一下:
return
...
.flatMap(userRepository::save)
.then(chain.filter(exchange));
1)将调用过滤器和userRepository组合到一个链中;
2)如果是userRepository::save
引起的错误,则将停止发出数据并中止请求,否则then()
将调用chain.filter(exchange)
。