SpringMVC的异常处理底层是通过AOP实现的,它的核心思想是将异常处理的代码和业务逻辑代码分离开来,使用它之后,我们在自己的业务代码中不需要在处理异常,有异常直接就上抛到框架中,框架就会将异常交给自定义的全局异常处理器中统一处理,自定义全局异常处理器,会用到两个注解:
SpringMVC支持下面两个注解来实现全局异常处理
- @RestControllerAdvice 标注在类上,声明当前类是一个用于专门处理异常的类
- @ExceptionHandler 标注在方法上,声明当前方法可以处理哪些异常
@RestControllerAdvice//底层就是AOP public class GlobalExceptionHandler {//顶级父类// 捕获所有类型异常 (非预期异常)@ExceptionHandler(Exception.class)public ErrorResult ex(Exception ex){ex.printStackTrace();return new ErrorResult(2,"对不起,操作失败,请联系管理员");}// 捕获指定类型的异常(预期内异常)@ExceptionHandler(ArithmeticException.class)public ErrorResult ae(ArithmeticException ae){ae.printStackTrace();return new ErrorResult(2,"数学异常");}@ExceptionHandler(NullPointerException.class)public ErrorResult npe(Exception npe){npe.printStackTrace();return new ErrorResult(2,"空指针异常");} }
ErrorResult是自己创建的异常提示类,用于给前端返回
@Data @AllArgsConstructor @NoArgsConstructor //异常提示类 public class ErrorResult {private Integer code;//成功:1,失败:2private String msg;//具体错误提示信息 }