一张思维导图带你学会Springboot创建全局异常、自定义异常

🧑‍💻作者名称:DaenCode
🎤作者简介:啥技术都喜欢捣鼓捣鼓,喜欢分享技术、经验、生活。
😎人生感悟:尝尽人生百味,方知世间冷暖。
📖所属专栏:SpringBoot实战


在这里插入图片描述


思维导图

在这里插入图片描述

🌟前言

在开发中,都离不开自定义异常、全局处理异常的使用。比如说在一些网站中看到的系统异常,请联系管理员、网络异常等等,都是通过其处理。如果按照下方图片中的信息展示给用户,谁能看的懂呢?于是这就体现出了自定义异常、全局处理异常的作用。

在这里插入图片描述

🌟前置知识

@ControllerAdvice:用于标识一个全局异常处理类。
@ExceptionHandler:用于标识全局异常处理类中的方法上,被标记的方法会在发生其特定异常时执行。
@RestControllerAdvice:相当于@ControllerAdvice+@ResponseBody注解的组合。也就是一共有两种实现方式。

方式一:@ControllerAdvice+@ExceptionHandler+@ResponseBody
方式二:@RestControllerAdvice+@ExceptionHandler

执行流程

  • 当请求到达Controller时,通过AOP代理机制对Controller进行增强。
  • 在AOP增强的过程中,如果请求处理过程中发生异常,AOP拦截器会捕获异常,并将其- 传递给全局异常处理器。
  • 全局异常处理器根据异常类型进行匹配,并调用相应的异常处理方法进行处理。
  • 异常处理方法执行完毕后,返回结果给AOP拦截器,AOP拦截器将结果返回给原始的Controller方法或其他地方。

🌟具体实现步骤

定义自定义异常类

自定义异常类:负责返回特定信息的异常。在实际开发中会根据业务需求进行自定义异常类的划分:订单模块的异常、收货模块的异常,每个模块的异常又包含很多不同的异常码。

思路

  • 根据业务范围定义见名知意的类名称,比如说订单异常可以为OrderException。因举例我这里起的是SelfException。
  • 继承RuntimenException
  • 声明异常码、异常信息
  • 实现有参构造器。目的是为了在throw new XXXException时,自定义异常码、异常信息。
public class SelfException extends RuntimeException{
    //异常码
    private Integer code;
    //异常信息
    private String msg;
    //创建构造器,为了抛出自定义信息的异常
    public SelfException(Integer code,String msg){
        this.code=code;
        this.msg=msg;
    }
    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }
}

定义全局异常处理类

全局异常处理类:负责捕获具体的异常或者全局异常,返回JSON格式数据给前端。
思路

  • 创建全局异常处理类。并用@RestControllerAdvice标识。
  • 创建异常处理方法。并用ExceptionHandler()标识此方法处理的异常。
  • 判断发生的异常是否是SelfException,若是则返回相应的异常码、异常信息。否则返回全局异常。
@RestControllerAdvice
public class SelfExceptionHandler {
//捕获所有异常,若值为SelfException,则捕获SelfException
    @ExceptionHandler(Exception.class)
    public JsonData handle(Exception e){
    //判断异常是否是自定义异常,若是则返回相应的异常码、异常信息。不是则返回全局异常。
        if (e instanceof SelfException){
            SelfException selfException=(SelfException) e;
            return JsonData.buildError(selfException.getCode(), selfException.getMsg());
        }else {
            return JsonData.buildError("系统异常,联系管理员");
        }
    }
}

🌟写在最后

有关于SpringBoot自定义异常、全局处理异常到此就结束了。感谢大家的阅读,希望大家在评论区对此部分内容散发讨论,便于大家学到更多的知识。还有一张处理全局异常的方式是返回页面的方式,感兴趣的大家可以在网上搜搜,现在一般就是用返回JSON格式的进行处理。


请添加图片描述

  • 30
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 53
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 53
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DaenCode

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值