Spring - 对其他 2 个项目使用来自外部 jar 的异常处理程序

Spring - Using an exception handler from an external jar for 2 other projects

我有 2 个项目具有相同的异常并使用相同的异常处理程序。 所以所有的异常和异常处理程序都被移到了外部模块。

异常导入正常,但似乎没有调用异常处理程序。 据我了解,如果我有 @ComponentScan 注释,应该从外部 jar 调用处理程序。

这是我的异常处理程序的样子:

@ComponentScan(basePackages = {"com.*first-project*.controller",
        "com.*second-project*.controller"})
@ControllerAdvice(basePackages = {"com.*first-project*.controller",
        "com.*second-project*.controller"})
public class GlobalExceptionHandler {

...

}

当异常处理程序单独作为每个项目的一部分时,它工作正常。然后它在@ControllerAdvice 注释中只有该项目的路径并且没有@ComponentScan。

当前导入带有异常处理程序的外部 jar:

compile files('libs/*jar-name*.jar')

您应该从主项目和扩展 jar 中正确扫描组件。此扫描应在主项目(项目 1 和项目 2)上完成。

因此,在 project-1 & project-2 中,您必须扫描在 jar-name 中找到的包。您可以创建单独的配置文件或在 GlobalExceptionHandler.

@ControllerAdvice(basePackages = {"jar.package"})
public class GlobalExceptionHandler {...}

在项目中添加@Import(GlobalExceptionHandler.class) 解决了问题,现在可以正确调用处理程序。

I was also facing the same issue what I did is:

Step 1: In GlobalExceptionHandler.java declare controller as base > packages using @ComponenetScan and @ControllerAdvice. Like as below

@ComponentScan(basePackages = "com.xxx.controller") @ControllerAdvice(basePackages = "com.xxx.controller") class GlobalExceptionHandler extends ResponseEntityExceptionHandler{}

Step 2: use @Import annotation and import GlobalExceptionHandler class > >in SpringbootMain Application class. Like as below @SpringBootApplication @Import(CustomExceptionHandler.class) public class SpringBootDemoApplication { }

第 3 步:在其他服务项目中将 GlobalExceptionHandler maven 依赖项包含在任何您想要使用它的地方。