前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >3分钟快速上手springBoot全局异常处理

3分钟快速上手springBoot全局异常处理

原创
作者头像
进击的代码
发布2023-12-10 15:00:50
2920
发布2023-12-10 15:00:50
举报
文章被收录于专栏:通俗易懂技术分享

全局异常处理

前言:

后端请求响应的数据格式都是有个统一的格式返回如Result,中有code,message,data。而若service、controller抛出异常则会导致不是统一格式的返回而是以下格式:

而导致前端接受不到约定好的code,message最终导致内部发生异常而用户却得不到最基本的反馈。

可以通过java中统一异常处理的方式抓取异常顶层controller抛出的异常,再对异常封装为约定好的Result对象。

实战代码:
  1. 在新建类GlobalExceptionHandler上加上@RestControllerAdvice表示抓取全局Exceptinon并用json格式返回@RestControllerAdvice public class GlobalExceptionHandler {
  2. 在方法名上加明@ExceptionHandler,并在value中表示要处理的特定异常,可以是自定义的异常UserException或则是RuntimeException
代码语言:java
复制
   @ExceptionHandler(value = UserException.class)
   public Result<Object> handleBusinessException(HttpServletRequest httpServletRequest, UserException e) {
       return Result.userError(e.getMessage());
   }

3.在写代码时可以显示抛出自定义异常,以下是service层的一个示例方法:

代码语言:java
复制
   public Boolean signUp(User user){
       if (userMapper.signIn(user.getUsername(), user.getPassword()) != null) {
           throw new UserException("已有账号重复注册");
       }

在此访问接口可以有自定义异常的信息

这样1.可以处理自定义异常2.可以处理其它意料外的异常统一返回;并且会自动优先匹配子类异常如优先级:UserException(继承了RuntimeException)-->RuntimeException-->Exception;

4.注意若捕获到子类异常则需要getCause().getmessage()获取异常错误信息不然message为null,以下是捕获RuntimeException子类异常的示范:

代码语言:java
复制
   private Logger log = LoggerFactory.getLogger(GlobalExceptionHandler.class);
   @ExceptionHandler(value = RuntimeException.class)
   public Result<Object> handleRuntimeException(HttpServletRequest httpServletRequest, RuntimeException e) {
       log.warn(e.getCause().getMessage());
       //或者记录异常完整信息:log.warn("运行时时异常:",e);
       return Result.serverError("系统内部错误");
   }
总结:

全局异常处理有利于提供用户友好的错误信息+集中式日志记录+统一处理异常,可以减少重复的代码。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 全局异常处理
    • 前言:
      • 实战代码:
        • 总结:
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档