文章目录
- 全局异常处理类
- 自定义异常
- 如何使用(手动抛出异常)
我是一名立志把细节说清楚的博主,欢迎【关注】🎉 ~
原创不易, 如果有帮助 ,记得【点赞】【收藏】 哦~ ❥(^_-)~
如有错误、疑惑,欢迎【评论】指正探讨,我会尽可能第一时间回复的,谢谢支持
下文中提到的 全局统一返回结果类(
Result
类)和 结果枚举类(ResultCodeEnum
类),请看文章:【Java】全局统一返回结果类封装
我们在包路径(common.Exception
)下创建 GlobalExceptionHandler
类:
全局异常处理类
@ControllerAdvice // AOP 面向切面。
public class GlobalExceptionHandler {@ResponseBody // 返回Json数据。@ExceptionHandler(DemoException.class) // 指定哪个类型的异常执行这个方法。public Result error(DemoException e) {return Result.build(e.getResultCode(), e.getMessage(), null);}@ResponseBody // 返回Json数据。@ExceptionHandler(Exception.class) // 异常处理器。public Result error(Exception e){e.printStackTrace();return Result.fail();}
}
自定义异常
@Data // Lombok 注解。
public class DemoException extends RuntimeException{ /*** 异常状态码。*/private Integer resultCode;/*** 接收状态码和错误消息创建异常对象。* @param resultCode 状态码。* @param resultMsg 错误消息。*/public DemoException(Integer resultCode,String resultMsg){super(resultMsg);this.resultCode = resultCode;}/*** 接收枚举类型参数* @param resultCodeEnum 枚举类型参数。*/public DemoException(ResultCodeEnum resultCodeEnum){super(resultCodeEnum.getResultMsg());this.resultCode = resultCodeEnum.getResultCode();}@Overridepublic String toString() {return "DemoException{" +"resultCode=" + resultCode +", resultMessage=" + this.getMessage() +'}';}
}
如何使用(手动抛出异常)
我们模拟用户登陆入参缺失的异常抛出。
public Result login(User user) {// XXX 校验逻辑省略if (checkout) { // 登陆信息缺失,登陆校验失败。throw new SsyxException(ResultCodeEnum.USER_LOGIN_CHECK_ERROR); // 手动抛出异常。}//正常的登陆逻辑。return Result.success(userInfo);}
响应结果:
异常编码、异常信息都可以在 ResultCodeEnum
类中自定义。此处仅作为演示:
{"code": 412,"message": "失败,用户登陆校验不通过","data": []
}
上文中提到的 全局统一返回结果类(
Result
类)和 结果枚举类(ResultCodeEnum
类),请看文章:【Java】全局统一返回结果类封装
我是一名立志把细节说清楚的博主,欢迎【关注】🎉 ~
原创不易, 如果有帮助 ,记得【点赞】【收藏】 哦~ ❥(^_-)~
如有错误、疑惑 ,欢迎【评论】指正探讨,我会尽可能第一时间回复的,谢谢支持