Пытаюсь отловить исключение при попытке дублирования полей во время сохранения пользователя (на поле ограничение UNIQUE). Использую save
от CrudRepository
, в документации следующее описание метода:
Returns:
the saved entity; will never be null.
Throws:
IllegalArgumentException - in case the given entity is null.
Но что если ошибка будет при выполнении запроса?
Контроллер:
@PostMapping(value = "/api/users/save")
public ResponseEntity save(@Valid @RequestBody User user) {
User newUser = userService.save(user);
log.info(newUser);
return ResponseEntity.ok(newUser);
}
Сервис:
@Override
public User save(User user) {
user.setId(userRepository.getLastId());
user.setPassword(bCryptPasswordEncoder.encode(user.getPassword()));
User newUser = null;
try {
newUser = userRepository.save(user); // никаких исключений
} catch (Exception e) {
log.error("CATCH STATEMENTS");
} finally {
log.info("FINALLY STATEMENTS");
}
return newUser;
}
Но при попытке сохранить пользователя я получаю ошибку:
ERROR 16228 --- [nio-8080-exec-2] o.h.engine.jdbc.spi.SqlExceptionHelper : ORA-00001: нарушено ограничение уникальности (STORM.USERS_EMAIL_UINDEX)
java.sql.SQLIntegrityConstraintViolationException: ORA-00001: нарушено ограничение уникальности (STORM.USERS_EMAIL_UINDEX)
Сервис возвращает мне пользователя при выполнении save
, а при передаче запроса (?) выбрасывает ошибку. Где отловить исключение я уже отчаялась найти.
Кстати, еще я пробовала проверять статус ответа в фильтре, но до фильтра выполнение просто не доходит. Возможно у вас есть идеи, где бы я смогла отловить исключение, спасибо.
#UPDATED
При попытке отловить RuntimeException
или DataIntegrityViolationException
суть не меняется (
log.warn("Try to save user");
try {
return userRepository.save(user);
} catch (RuntimeException e) {
log.error("Failed to save user");
}
И вот результат:
Вы не можете отловить, потому что там RuntimeException нужно ловить, а если конкретней, то DataIntegrityViolationException. Почитать можно например тут
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Есть json
мне надоедает и иногда лень писать команду (cout << "текст";) поэтому хочу поместить всю строку cout << "текст"; в букву c
Суть программы заключается во вставлении текста в поля через нажатие кнопки возле поляТекст для вставление берется с EditText сверху