Kotlin Spring JPA Reactive克服了默认异常

问题描述 投票:0回答:1

我有一个问题,当数据库查询中有唯一约束时,

然后要再次插入,我想覆盖默认例外。

就像有这样的数据库表时一样

CREATE TABLE IF NOT EXISTS $ENROLLED_USERS_TABLE (
                    id INT AUTO_INCREMENT PRIMARY KEY,
                    $USERS_FIELD VARCHAR(250) NOT NULL UNIQUE
                );

和类似的仓库

@Repository
interface UserRepository: ReactiveCrudRepository<User, Int>{

    @Modifying
    @Query("insert into $ENROLLED_USERS_TABLE ($USERS_FIELD) values (:user)")
    fun insertUser(@Param("user") user: String?): Mono<Void?>?
}

这是我的控制器

@PostMapping("/{user}")
    suspend fun add(@PathVariable user:String): Void? = userRepository.insertUser(user)?.awaitFirstOrNull()

我曾尝试将其试捕,但没有成功赶上

@Service
class UserService(val userRepository: UserRepository) {

    suspend fun add(user:String) {
        try {
            // some code
            userRepository.insertUser(user)?.onErrorReturn(throw ResourceAlreadyExists("User Already exists"))

        }
        catch (e: SQLException) {
            println("Custome Message")
        }
    }
}

什么都没有,我仍然得到显示我的数据库查询的异常:/

kotlin exception spring-data-jpa reactive-programming spring-jdbc
1个回答
0
投票

解决方案很简单

@PostMapping("/{user}")
    suspend fun add(@PathVariable user:String): Void? = userRepository.insertUser(user)?.onErrorMap { throw ResourceAlreadyExists("User Already Exists") }?.awaitFirstOrNull()

映射错误是正确的一个

© www.soinside.com 2019 - 2024. All rights reserved.