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

79 阅读3分钟

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


在这里插入图片描述


@[toc]

思维导图

在这里插入图片描述

🌟前言

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

在这里插入图片描述

🌟前置知识

@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格式的进行处理。


请添加图片描述