创建一个全局异常exception类
@ControllerAdvice //控制器增强
@Log4j2
public class ExceptionCatch {
@ExceptionHandler(Exception.class) //拦截所有异常
@ResponseBody
public ResponseResult exception(Exception e) {
e.printStackTrace();
//记录日志
log.error("catch exception:{}",e.getMessage());
//返回通用异常
return ResponseResult.errorResult(AppHttpCodeEnum.SERVERS_ERROR);
}
}
@ControllerAdvice //控制器增强
与@ExceptionHandler一起使用,用于接收controller抛出的指定异常或者全部异常统一处理
并且在配置文件类编写通用扫包代码
@Configuration
@ComponentScan("com.zuiyi.common.exception")
public class ExceptionConfig {
}
加上@Configuration注解主要是给我们的类加上了cglib代理。在执行我们的配置类的方法时,会执行cglib代理类中的方法,其中有一个非常重要的判断,当我们的执行方法和我们的调用方法是同一个方法时,会执行父类的方法new(cglib代理基于继承);当执行方法和调用方法不是同一个方法时会调用beanFactory.getBean获取。
测试: