我正在尝试创建可由多个模块使用的异常处理模块。所以我创建了包含与处理异常相关的所有逻辑的 jar。我正在尝试添加全局控制器建议,它可以捕获异常并生成错误响应。问题是该控制器建议没有被调用。 当我在各个模块中声明此控制器建议时,它工作得很好。
异常处理模块 --异常响应生成器 主模块 --休息控制器 这不行
异常处理模块
主模块 --休息控制器 --异常响应生成器 这有效
我做错了什么?
package com.abc.cde.exceptionhandler.handler;
@ControllerAdvice
@Log
public class ExceptionToResponseGenerator extends ResponseEntityExceptionHandler {
@Override
protected ResponseEntity<Object> handleMethodArgumentNotValid(MethodArgumentNotValidException ex, HttpHeaders httpHeaders, HttpStatus httpStatus, WebRequest webRequest) {
return new ResponseEntity(new ErrorDetails(new Date(), "bad", "bad"), HttpStatus.BAD_REQUEST);
}
主课
@Import(IncludeExceptionHandling.class)
@SpringBootApplication
public class MainApplication{
public static void main(String[] args) {
SpringApplication.run(MainApplication.class, args);
}
}
-----------
IncludeExceptionHandling
@Configuration
@EnableAspectJAutoProxy
public class IncludeExceptionHandling {
@Bean
public ExceptionLoggerPointcut notifyAspect() {
return new ExceptionLoggerPointcut();
}
}
ExceptionLoggerPointcut 是 aop 包装异常并重新抛出它
问题似乎在于缺少@ComponentScan。请将代码的包名和外部jar库名传递给@ComponentScan注解,以便Spring可以注册组件并使其可供您的App使用。
我最近使用 JAR 实现了 ControllerAdvice 来处理客户异常。单独的 SpringBoot 应用程序中的 ControllerAdvice 和 REST API 的单独逻辑。
我添加了 Maven 依赖项,如下 -
<dependency>
<groupId>com.controlleradvice</groupId>
<artifactId>ControllerAdviceJar</artifactId>
<version>1.1</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/ControllerAdviceJar-1.1.jar</systemPath>
</dependency>
另外,正如上面提到的,我漏掉了我的 SpringBoot @ComponentScan 的 JAR 包。
如果有帮助请点赞。谢谢!