spring-boot - 如何在另一个具有循环依赖的单声道中使用单声道
问题描述
我有一个 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 流需要知道这是否已经存在,这会返回一个单声道。
解决方案
这里的逻辑看起来有点奇怪——你可能可以这样做:
fun create(userDTO: Mono<UserDTO>): Mono<Void> {
return userDTO.flatMap {
userRepository.findByNameIgnoreCase(it.username)
.flatMap(user -> userAlreadyExist())
.switchIfEmpty(createNewUser(it))
}.then()
推荐阅读
- windows - 为什么 PDF 文本提取会挂起单个 PDF 但通过 RDP 工作
- python - 在熊猫数据框中设置多索引列的顺序
- c - How to sync two process (child and parent) with signals in C?
- ubuntu - How to get complete history from different tty or pts
- python - How to handle temporary errors which are not signaled by http status code?
- ios - Objective c iOS 11中的静默通知显示横幅错误
- android - 需要重新启动应用程序才能显示更改?
- wampserver - How to Configure WAMP Server so that Multi developer can work on common Server on Network
- azure - download file log from blob storage using node js
- python - Amazon SQS FIFO 队列发送消息失败