如何从依赖项中忽略@ExceptionHandler?

时间:2019-02-04 13:59:36

标签: java spring exception controller exceptionhandler

我在尝试在自定义异常处理程序(带有 @ExceptionHandler 和<<注释)的方法之一中返回“ ResponseEntity ”时遇到问题strong> @ControllerAdvice ),我从“ doOnError”(rxjava)调用此方法,但是我的问题是,执行此操作不仅不仅调用了我的方法,还调用了另一个 @ExceptionHandler @ControllerAdvice 中带注释的类被调用,但是该类不在我的项目中,而是在我的依赖项中。.因此,以澄清我的问题:

我正在尝试处理项目中的每个异常,都返回一个ResponseEntity,但是当我在 @ControllerAdvice 中的 @ExceptionHandler 上执行此操作时,另一个位于我的依赖项是在我的自定义项之后调用的,因此我所构建的响应实体永远不会返回,它只会返回由依赖项 @ExceptionHandler 创建的响应实体。

我的问题是,有一种避免调用依赖项异常处理程序的方法吗?

注释

  • @ExceptionHandler 用于内部的方法 异常处理程序类,最后一个带有注释 @ControllerAdvice。
  • 我尝试使用Order和Priority批注,但它们对我不起作用。

2 个答案:

答案 0 :(得分:1)

您可以防止使用Spring(https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/context/annotation/ComponentScan.html#excludeFilters)的@ComponentScan加载类。

您可以为特定的ExceptionHandler类创建自定义排除过滤器,定义要排除的包(根据定义处理程序的包可能不可行),甚至可以定义要排除的特定类

答案 1 :(得分:0)

我解决了我的问题。我尝试了João提出的@ComponentScan解决方案,但该解决方案对我不起作用,因为位于我的依存关系中的异常处理程序未标注为组件。.因此,我再次进行研究,并弄清楚我在异常处理程序中的“ handleException”方法中添加了另一个参数(注释为@ExceptionHandler),该方法不起作用,因为我删除了第二个参数(我只有“ throwable”),并且它开始工作!所以在简历中,我添加了..

@Order(Ordered.HIGHEST_PRECEDENCE)

.. annotation到我的异常处理程序类中,并且仅将一个参数(异常)放入带有注释的@ExceptionHandler方法中,该方法将检索我需要的“ ResponseEntity”