Kotlin Spring JPA Реактивное преодоление исключения по умолчанию - PullRequest
0 голосов
/ 13 апреля 2020

У меня возникла проблема: когда в запросе к БД есть уникальное ограничение,

, а затем я хочу вставить его снова, я хотел переопределить исключение по умолчанию.

, например, когда имея такую ​​таблицу БД

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")
        }
    }
}

ничего не работает, я все еще получаю исключение, которое показывает мой запрос к базе данных: /

1 Ответ

0 голосов
/ 13 апреля 2020

решение было простым

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

отображение ошибки было правильным

...