如何仅在 Mono 为空时才执行操作,如果单声道为空,如何引发错误
我正在尝试将一个项目转换为使用Spring WebFlux,并且在处理一些基本的业务逻辑时遇到了问题。我有一个负责检索/保存记录的存储库层和一个负责应用程序业务规则的服务层。我想做的(在服务)层是检查给定用户名的用户是否已存在。如果是这样,我想用错误来回应。如果没有,我想允许插入发生。
我在存储库层调用一个方法,该方法将按用户名查找用户,如果未找到,它将返回空的Mono。这按预期工作;但是,我已经尝试了flatMap和(defaultIfEmpty和swithIfEmpty)的各种组合,但无法对其进行编译/构建。
public Mono<User> insertUser(User user) {
return userRepository.findByUsername(user.username())
.flatMap(__ -> Mono.error(new DuplicateResourceException("User already exists with username [" + user.username() + "]")))
.switchIfEmpty(userRepository.insertUser(user));
}
我得到的错误是 ,所以 似乎没有反映适当的类型,并且转换似乎也不起作用。Mono<Object> cannot be converted to Mono<User>
swithIfEmpty