SpringMVC 中提供了异常处理器,可以集中统一处理项目中的异常,如下例:
// @ControllerAdvice
// @ResponseBody
// 注解上面的两个或者下面的一个
@RestControllerAdvice
public class ProjectExceptionAdvice {
// 注解内指定要捕获的异常类,此处捕获了所有的异常
@ExceptionHandler(Exception.class)
public Result doException(Exception exception) { // 要处理的异常作为参数传入
System.out.println("出现异常!");
exception.printStackTrace();
return new Result(-1, null, "哎呀,出错了..."); // 出现异常也要返回数据给前端
}
}
对几个注解的补充说明:
再补充:异常处理器会按照精确性优先的规则捕获异常,例如同时有捕获 Exception.class 和捕获 RuntimeException.class 的两个处理方法,此时项目出现了 RuntimeException 异常,那么此异常不会被当作 Exception 捕获,而是更精确的作为 RuntimeException 被捕获并处理
此外,如果有两个处理方法捕获同一个异常类(@ExceptionHandler 注解中的内容相同),那么出现此种异常时会出错,异常无法被处理