Kotlin Spring JPA Reactive 克服默认异常
Kotlin Spring JPA Reactive overcoming the default exception
我遇到了一个问题,
当数据库查询中有唯一约束时,
然后又想插入,
我想覆盖默认异常。
像这样的 DB table
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()
我试过将它们放在 try and catch 中,但没有成功
赶上
@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")
}
}
}
没有任何效果我仍然得到显示我的数据库查询的异常:/
解决方法很简单
@PostMapping("/{user}")
suspend fun add(@PathVariable user:String): Void? = userRepository.insertUser(user)?.onErrorMap { throw ResourceAlreadyExists("User Already Exists") }?.awaitFirstOrNull()
映射错误是正确的
我遇到了一个问题, 当数据库查询中有唯一约束时,
然后又想插入, 我想覆盖默认异常。
像这样的 DB table
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()
我试过将它们放在 try and catch 中,但没有成功 赶上
@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")
}
}
}
没有任何效果我仍然得到显示我的数据库查询的异常:/
解决方法很简单
@PostMapping("/{user}")
suspend fun add(@PathVariable user:String): Void? = userRepository.insertUser(user)?.onErrorMap { throw ResourceAlreadyExists("User Already Exists") }?.awaitFirstOrNull()
映射错误是正确的