springboot全局异常处理方式
springboot全局异常有两种处理方式
第一种方案
继承DefaultErrorAttributes类,重写getErrorAttributes方法
代码如下:
@Slf4j
@RestController
public class CustomException extends DefaultErrorAttributes {
public Map<String, Object> getErrorAttributes(WebRequest webRequest, ErrorAttributeOptions options) {
Map<String, Object> errorAttributes = super.getErrorAttributes(webRequest, options);
/*errorAttributes.put("code", 509);
errorAttributes.put("msg", errorAttributes.get("message"));
errorAttributes.put("data", null);
errorAttributes.remove("message");
errorAttributes.remove("status");
errorAttributes.remove("error");
errorAttributes.remove("timestamp");
errorAttributes.remove("path");*/
return errorAttributes;
}
}
getErrorAttributes方式可以自己写,也可以引用父类的方法,同时可以对父类方法的返回值做增强
父类方法的返回值是springboot默认的返回值,截图如下:
![](https://img-blog.csdnimg.cn/img_convert/366179c29e81024dd3598d4068970de4.png)
去掉注释的代码,看看增强效果:
![](https://img-blog.csdnimg.cn/img_convert/5895a80b3878376fa697d084d3ddc6b3.png)
第二种方案
使用@ControllerAdvice和@ExceptionHandler注解
@ControllerAdvice注解类
@Slf4j
@ControllerAdvice
public class GlobalExceptionHandler {
@ResponseBody
@ExceptionHandler(BusinessException.class)
public JsonResult globalException(HttpServletResponse response, BusinessException ex){
return ResponseUtil.fail(508,ex.getMessage());
}
}
自定义异常类BusinessException
@Data
public class BusinessException extends RuntimeException{
private int code;
private String message;
public BusinessException(int code,String message){
this.code = code;
this.message = message;
}
效果如下
![](https://img-blog.csdnimg.cn/img_convert/ce13e7f33853d27a1473e4422144a151.png)