Как игнорировать @ExceptionHandler из зависимости?

У меня проблема с возвратом "ResponseEntity" в одном из моих методов, который находится в пользовательском обработчике исключений (с аннотациями @ExceptionHandler и @КонтроллерСовет), я вызываю этот метод из "doOnError" (rxjava), но моя проблема в том, что когда я это делаю, вызывается не только мой метод, но и другой @ExceptionHandler в аннотированном классе @КонтроллерСовет, но этот класс не находится в моем проекте, находится в одной из моих зависимостей.. Итак, чтобы прояснить мою проблему:

Я пытаюсь обработать все исключения в моем проекте, возвращая ResponseEntity, но когда я делаю это на моем @ExceptionHandler внутри моего @КонтроллерСовет, другое, расположенное в моих зависимостях, вызывается после моего пользовательского, поэтому объект ответа, который я построил, никогда не возвращается, он просто возвращает созданный зависимостью @ExceptionHandler.

Мой вопрос, есть ли способ избежать вызова обработчика исключений зависимостей?

Примечания:

  • @ExceptionHandler используется для метода внутри класс обработчика исключений, этот последний аннотирован @КонтроллерСовет.
  • Я пробовал использовать аннотации Order и Priority, но они у меня не сработали.
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
0
1 807
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете запретить загрузку классов с помощью @ComponentScan из Spring (https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/context/annotation/ComponentScan.html#excludeFilters).

Вы можете либо создать собственный фильтр исключения для этого конкретного класса ExceptionHandler, определить пакеты, которые вы хотите исключить (это может быть невозможно в зависимости от пакета, в котором определен обработчик), либо даже определить определенные классы для исключения.

Знаете ли вы, можно ли добавить «excludeFilters» в @ComponentScan, чтобы исключить пакет внешней библиотеки?

Marco Marchetti 04.02.2019 18:22

Да, безусловно. Попробуйте создать собственный фильтр @ComponentScan(excludeFilters = @Filter(type = CUSTOM, classes = ExcludingThirdPartyControllerAdvice.class)). Этот класс фильтра должен реализовывать TypeFilter, и, предполагая, что ваш сторонний совет сканируется, вы можете вернуть true из фильтра при загрузке компонента, чтобы предотвратить его выполнение.

João Dias Amaro 04.02.2019 19:16
Ответ принят как подходящий

Я решил свою проблему. Я попытался использовать решение @ComponentScan, предложенное Жоао, и оно не сработало для меня, потому что обработчик исключений, расположенный в моих зависимостях, не аннотирован как компонент... поэтому я снова начал исследовать и понял, что когда я добавляю еще один параметр в метод "handleException" в моем обработчике исключений (который аннотирован как @ExceptionHandler) не работает, потому что я удалил второй параметр (у меня был только "throwable") и он начал работать! Поэтому в резюме я добавил ..

@Order(Ordered.HIGHEST_PRECEDENCE)

..annotation к моему классу обработчика исключений и поместить только один параметр (исключение) в аннотированный метод @ExceptionHandler, который извлечет нужный мне "ОткликЭнтити".

@OmidRostami Вы пробовали подход к ответу Жоао?

Marco Marchetti 05.04.2021 23:30

Другие вопросы по теме