Обработка исключений
Ошибка Java должна стать понятным HTTP-ответом
Сервис может сообщить об ошибке исключением: например, запрошенный ресурс не найден. Если ничего не настроить, внутреннее исключение и внешний HTTP-контракт оказываются слишком тесно связаны. Spring MVC позволяет отдельно описать, как конкретная ошибка должна выглядеть для клиента.
@RestControllerAdvice
class ApiExceptionHandler {
@ExceptionHandler(UserNotFoundException.class)
ResponseEntity<ApiError> handle(UserNotFoundException ex) {
return ResponseEntity.status(404)
.body(new ApiError(ex.getMessage()));
}
}
@ExceptionHandler связывает тип исключения с методом обработки.
@RestControllerAdvice позволяет вынести такие методы из отдельных контроллеров
и применять их к web-слою централизованно.
Почему централизованный обработчик полезен
Без общего слоя каждый controller начинает повторять одинаковые try/catch блоки
и формировать ошибки по-своему. Advice позволяет держать один формат ошибки и единые правила
соответствия между типичными исключениями и HTTP status.
Не отправляй клиенту внутренние детали исключения без необходимости.
Stack trace, SQL-текст и служебные сообщения полезны в логах, но внешний API обычно должен возвращать
стабильную и безопасную структуру ошибки.
Проверь себя
Разбор задания
Ментор знает решение и поможет тебе прийти к нему самостоятельно
Войди, чтобы использовать Ментора
Ментор учитывает текущую задачу и историю диалога.
Войти
Проверь важные нюансы и ответ после собственной попытки.
Войди, чтобы посмотреть решение
Решение и разбор доступны после авторизации.
Войти