Вопрос с собеседования · Spring

Чем @ControllerAdvice отличается от @ExceptionHandler внутри контроллера?

MiddleВалидация и обработка ошибокSpring
Ещё спрашивают так:
  • Какой обработчик исключений выиграет?
Коротко

@ExceptionHandler в контроллере — локальный, в @ControllerAdvice — глобальный. Локальный обработчик подходящего типа выигрывает у глобального.

  • Среди нескольких — побеждает наиболее конкретный тип исключения
  • @ControllerAdvice(basePackages = …) или assignableTypes — ограничить область
  • Порядок нескольких advice — @Order

А ещё @RestControllerAdvice = @ControllerAdvice + @ResponseBody

Подробно

Порядок разрешения такой: сначала ищется @ExceptionHandler в самом контроллере, затем в @ControllerAdvice; среди нескольких подходящих выбирается наиболее специфичный по типу исключения. Область действия совета можно сузить аннотациями, пакетами или типами через параметры @ControllerAdvice, а порядок нескольких советов задаётся @Order. Практическая рекомендация: держать один глобальный @RestControllerAdvice с единым форматом ошибки и correlation id, а локальные обработчики заводить только там, где нужна действительно контроллер-специфичная реакция. И не забывать, что наружу не отдают стектрейсы и внутренние сообщения.

Что хотят услышать

  • Локальная и глобальная области.
  • Правила выбора обработчика.

Частые ошибки

  • Заводить обработчик Exception, перехватывающий всё и скрывающий настоящие ошибки.
  • Отдавать в теле ответа сообщение исключения как есть.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✗@ControllerAdvice обрабатывает только неконтролируемые исключения сервисов
  • ✓Advice действует на все контроллеры; локальный @ExceptionHandler — на свой и важнее
  • ✗Локальный @ExceptionHandler игнорируется, если есть @ControllerAdvice
  • ✗@ControllerAdvice работает только с ошибками валидации

Что спросят дальше

  • Как ограничить область действия @ControllerAdvice?
  • Как логировать исключение и при этом не раскрыть детали клиенту?

Разбор темы

Связанные вопросы

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования