如何解决将Spring Reactor Mono与多个switchIfEmpty一起使用
if (!request.isValid()) {
throw new ValidationException("Its not valid");
}
if (!request.isCorrect()) {
throw new IncorrectException();
}
return Mono.just(
someService.process(request)
);
return Mono.just(request)
.filter(req -> !req.isValid())
.switchIfEmpty(Mono.error(new ValidationException("Its not valid")))
.filter(req -> !req.isCorrect())
.switchIfEmpty(Mono.error(new IncorrectException()))
.flatMap(req -> Mono.just(someService.process(req)));
问题是,即使它在isValid()
上失败,代码仍会继续,第二个switch
会覆盖第一个。
解决方法
您是否尝试过使用“Mono.defer()”?
您的代码类似于:
return Mono.just(request)
.filter(req -> !req.isValid())
.switchIfEmpty(Mono.defer(() -> Mono.error(new ValidationException("Its not valid"))))
.filter(req -> !req.isCorrect())
.switchIfEmpty(Mono.defer(() -> Mono.error(new IncorrectException())))
.flatMap(req -> Mono.just(someService.process(req)));
我遇到了同样的问题,它对我有用。
您可以在此线程上阅读有关 Mono.defer() 的更多信息:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。