【发布时间】:2019-03-05 02:48:59
【问题描述】:
我有一个 Spring Boot 反应式应用程序。如果用户不存在,我想在哪里实现创建用户。像这样:
fun userAlreadyExist() = Mono.error<UserDTO>(UsernameAlreadyExistException())
fun create(userDTO: Mono<UserDTO>): Mono<Void> {
return userDTO.filter { userRepository.existsByNameIgnoreCase(it.username).block() == false }
.switchIfEmpty(userAlreadyExist())
.flatMap { createNewUser(it).then() }
我真正不喜欢的是我需要在过滤器中使用.block()。有一个更好的方法吗?
最大的问题是两者都有循环依赖,因为UserRepository 需要知道用户名,而 userDTO 流需要知道这是否已经存在,这会返回一个单声道。
【问题讨论】:
标签: spring-boot kotlin reactive-programming spring-webflux project-reactor