В Spring MVC обработка исключений внутри транзакций осуществляется с помощью нескольких механизмов, среди которых:
- @ExceptionHandler. 12 Используется для обработки исключений на уровне контроллера. 1 Позволяет привязать обработку конкретных исключений к определённому методу в контроллере. 1
- @ResponseStatus. 2 Определяет код статуса для заданного исключения. 2 Может использоваться на уровне пользовательского класса исключений и на уровне метода с помощью @ExceptionHandler в контроллере. 2
- @ControllerAdvice. 2 Обеспечивает глобальную обработку исключений, доступную для каждого контроллера. 2 Нужно определить класс для глобального исключения и аннотировать его @ControllerAdvice, а внутри класса определить методы с аннотацией @ExceptionHandler. 2
- HandlerExceptionResolver. 24 Интерфейс с различными реализациями, который разрешает исключения, выброшенные во время выполнения. 2 С его помощью можно определить сопоставления типа исключения и имени представления. 2
По умолчанию, Spring откатывает транзакцию при возникновении RuntimeException или Error. 1 Исключения типа Checked Exception (например, SQLException) не приводят к откату транзакции, если это явно не указано. 1 Этим поведением можно управлять через атрибуты rollbackFor / noRollbackFor у аннотации @Transactional. 3