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

问题描述

我有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中正确扫描组件。此扫描应在主项目(project-1和project-2)上进行。

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

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

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