创建全局异常处理器
@RestControllerAdvice //声明当前这个类是全局异常处理器
public class GlobalExceptionHandler {
/**
* @ExceptionHandler指定当前这个方法就是一个异常处理方法,并且指定当前方法可以处理的异常类型
* @param e
* @return
*/
@ExceptionHandler(value = GmallException.class)
public Result gmallExceptionHandler(GmallException e){
e.printStackTrace();
ResultCodeEnum resultCodeEnum = e.getResultCodeEnum();
return Result.build(null, resultCodeEnum);
}
/**
* 处理非业务异常
* @param e
* @return
*/
@ExceptionHandler(value = Exception.class )
public Result systemExceptionHandler(Exception e){
e.printStackTrace();
return Result.build(null, ResultCodeEnum.SYSTEM_EXCEPTION);
}
}
方法一:使用@ComponentScan
注解
@ComponentScan(basePackages = "全局异常处理器所在的包路径")
注:@SpringBootApplication
注解中有默认的@ComponentScan
,再添加@ComponentScan
会覆盖默认的包扫描路径,全局异常处理器所在的包路径必须和启动类所在的包路径一致,否则扫描不到
解决办法:调大包扫描的范围
方法二:使用@Import
注解
@Import(value = GlobalExceptionHandler.class)
注:使用这个注解必须知道全局异常处理类的类名称
方法三:使用自定义注解
@Target(value = ElementType.TYPE) //自定义注解使用位置为类
@Retention(value = RetentionPolicy.RUNTIME) //生效时期
@Import(value = GlobalExceptionHandler.class)
public @interface EnableGlobalExceptionHandler {
}
方法四:使用Spring Boot的自动化配置
- 在全局异常处理器所在的项目resources资源目录下创建META-INF文件夹,在该文件夹下创建spring.factories文件,在文件中添加以下内容:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\要实现自动化配置的类的全类名
标签:处理,value,几种,处理器,注解,全局,异常,class
From: https://www.cnblogs.com/insilently/p/17517400.html