【问题标题】:How to ignore an @ExceptionHandler from a dependency?如何忽略依赖项中的@ExceptionHandler?
【发布时间】:2019-06-28 06:56:09
【问题描述】:

我在尝试在我的一个方法中返回“ResponseEntity”时遇到问题,该方法位于自定义异常处理程序中(使用 @ExceptionHandler 和 @ControllerAdvice),我正在从“doOnError”(rxjava)调用此方法,但我的问题是,当我这样做时,不仅调用了我的方法,还调用了另一个 @ExceptionHandler@ControllerAdvice 带注释的类中被调用,但这个类不在我的项目中,在我的依赖项之一中。所以,澄清我的问题:

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

我的问题是,有没有办法避免调用依赖异常处理程序?

注意事项

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

【问题讨论】:

    标签: java spring exception controller exceptionhandler


    【解决方案1】:

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

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

    【讨论】:

    • 您知道是否可以在@ComponentScan 中添加“excludeFilters”以排除外部库包?
    • 是的,当然。尝试创建自定义过滤器@ComponentScan(excludeFilters = @Filter(type = CUSTOM, classes = ExcludingThirdPartyControllerAdvice.class))。此过滤器类必须实现TypeFilter,并且假设正在扫描您的第 3 方建议,您可以在加载 bean 时从过滤器返回 true 以防止其执行。
    【解决方案2】:

    我解决了我的问题。我尝试使用 João 提出的@ComponentScansolution,但它对我不起作用,因为位于我的依赖项中的异常处理程序没有注释为组件.. 所以我再次开始研究,我发现当我添加我的异常处理程序中“handleException”方法的另一个参数(注释为@ExceptionHandler)它不起作用,因为我删除了第二个参数(我只有“throwable”)并且它开始工作了!所以在简历中,我添加了..

    @Order(Ordered.HIGHEST_PRECEDENCE)
    

    ..对我的异常处理程序类进行注释,并在@ExceptionHandler 注释方法中仅放置一个参数(异常),这将检索我需要的 "ResponseEntity"

    【讨论】:

    • @OmidRostami 你尝试过 João 回答方法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多