前言:
全局异常处理主要是为了应对 springboot 工程可能出现的异常情况,对已知或未知的异常进行统一处理,保证工程有一定的容错能力。使用起来比较简单,这里记录示意一下。
1. 示例
这里举一个常见的用户调用接口的例子:
用户调用接口会先经过拦截器,在 preHandle 方法中校验 token ,token 异常会抛出自定义异常 UserLoginException;自定义异常在 GlobalExceptionHandler 中被绑定该异常的 userLoginException 方法处理;相关代码如下(部分非相关代码省略):
拦截器部分代码如下:
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String token = request.getHeader("token");
if (null == token) {
throw new UserLoginException("缺少认证信息");
}
if(!JwtTokenUtils.verity(token)){
throw new UserLoginException("认证信息失效");
}
return true;
}
UserLoginException 定义如下:
public class UserLoginException extends Exception {
public UserLoginException(String message) {
super(message);
}
}
全局异常处理:
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(UserLoginException.class)
public ResultBean userLoginException(UserLoginException e) {
return ResultBean.error(e.getMessage());
}
@ExceptionHandler(Exception.class)
public ResultBean unknownException(Exception e) {
return ResultBean.error("未知错误");
}
}
注:@RestControllerAdvice = @ControllerAdvice + @ResponseBody