Разница между @ControllerAdvice и @ExceptionHandler в Spring заключается в подходе к обработке исключений:
- @ControllerAdvice используется для глобальной обработки исключений. www.baeldung.com howtodoinjava.com С её помощью определяют класс, который будет обрабатывать исключения для всех контроллеров. howtodoinjava.com По умолчанию методы в таком классе применяются глобально ко всем контроллерам. howtodoinjava.com
- @ExceptionHandler используется для обработки конкретных исключений. howtodoinjava.com Аннотированные методы вызываются, когда указанные исключения выбрасываются из контроллера. howtodoinjava.com При этом метод активен только для этого конкретного контроллера, а не глобально для всего приложения. dzen.ru stackoverflow.com
Таким образом, основное различие в том, что @ControllerAdvice позволяет централизовать логику обработки исключений в одном классе и применять её ко всем контроллерам, а @ExceptionHandler работает на уровне контроллера и обрабатывает исключения только для этого конкретного контроллера. howtodoinjava.com stackoverflow.com