springboot统一异常处理
1、首先引入依赖(若不用数据校验则忽略这一步)
<!--数据校验依赖包-->
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
</dependency>
2、定义一个统一异常处理类
public class TestExceptionControllerAdvice (){}
3、声明这个类是异常处理类
第一种就是在类上标注注解
@ControllerAdvice(basePackages = "xxx.xxx.xxx.controller") // 该类是一个异常处理类
@ResponseBody // 声明该类的所有方法都返回json格式的字符串
public class TestExceptionControllerAdvice (){}
第二种就是在类上标注注解(实际上就是第一种注解的升级版)
@RestControllerAdvice(basePackages = "xxx.xxx.xxx.controller")
public class TestExceptionControllerAdvice (){}
我们可以看@RestControllerAdvice注解的源码
实际上都是包含了第一种方法的两个注解
4、在该类上写上异常处理的方法
@ExceptionHandler(value = Exception.class) //声明该方法是哪个异常发生时调用的方法
public R handlerValidException(Exception e){
log.error("出现异常啦!->{},型------>{}", e.getMessage(), e.getClass());
BindingResult bindingResult = e.getBindingResult();
List<FieldError> fieldErrors = bindingResult.getFieldErrors();
Map<String, String> map = new HashMap<>();
fieldErrors.forEach((item) -> {
map.put(item.getField(), item.getDefaultMessage());
});
return R.error(BizCodeEnume.VALID_EXCEPTION.getCode(), BizCodeEnume.VALID_EXCEPTION.getMsg()).put("data", map);
}
后序完善。。。。。