Этот вопрос проверяет знание механизма глобальной обработки ошибок в Spring и умение использовать его для унифицированного API-ответа.
В Spring можно централизовать обработку исключений с помощью аннотации @ControllerAdvice и методов с @ExceptionHandler. Это позволяет перехватывать исключения из всех контроллеров и возвращать стандартизированный JSON-ответ.
Аннотация @ControllerAdvice — регистрирует класс как обработчик ошибок на уровне всего приложения.
Метод с @ExceptionHandler — обрабатывает конкретные типы исключений.
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(EntityNotFoundException.class)
public ResponseEntity<String> handleNotFound(EntityNotFoundException ex) {
return ResponseEntity.status(HttpStatus.NOT_FOUND).body("Not found: " + ex.getMessage());
}
}Можно возвращать кастомные DTO с кодом ошибки, сообщением и временем.
Поддерживается логирование и трассировка.
Позволяет избежать дублирования кода в контроллерах.
Обеспечивает единообразные ответы клиенту.
Вывод:
@ControllerAdvice и @ExceptionHandler позволяют гибко и централизованно обрабатывать ошибки во всех REST-контроллерах.