我有一个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流需要知道是否已经存在(这会返回单声道)。
答案 0 :(得分:0)
这里的逻辑看起来有些奇怪-您可能可以执行以下操作:
objectID
答案 1 :(得分:0)
问题是我使用filterWhen()
代替了fun create(userDTO: Mono<UserDTO>): Mono<Void> {
return userDTO.filterWhen { innerUserDTO ->
userRepository.existsByNameIgnoreCase(innerUserDTO.username).map { !it }
}
.flatMap { createNewUser(it) }
.switchIfEmpty(userAlreadyExist())
.then()
}
来评估异步Monos。
我做了什么:
{{1}}