springboot捕获全局异常实现过程

 更新时间:2026年03月13日 10:53:11   作者:我是菜鸟呐  
本文主要介绍了Java中的异常和错误,包括Exception和Error的区别、如何捕捉全局异常、自定义异常的实现等,通过实例代码和步骤,展示了如何在Spring Boot项目中实现全局异常处理,并自定义异常类来增强程序的健壮性

学习目标

java中的异常和错误

学习内容

  • 首页要了解什么是异常什么是错误
  • 捕捉全局异常
  • 自定义异常

java中异常和错误的区别

Error类和Exception类的父类都是throwable类: 他们的区别是:

  • Error类一般是指与虚拟机相关的问题,如系统崩溃,虚拟机错误,内存空间不足,方法调用栈溢等。对于这类错误的导致的应用程序中断,仅靠程序本身无法恢复和和预防,遇到这样的错误,建议让程序终止。
  • Exception类表示程序可以处理的异常,可以捕获且可能恢复。遇到这类异常,应该尽可能处理异常,使程序恢复运行,而不应该随意终止异常。

常见的异常 :

  • ArrayIndexOutOfBoundsException 数组下标越界异常,
  • ArithmaticException 算数异常 如除数为零
  • NullPointerException 空指针异常
  • IllegalArgumentException 不合法参数异常

直接上代码

public class exception {
    public static void main(String[] args) {
        exception01();
    }
    public static void exception01(){
        int i =1/0;
    }
}

结果是:算数异常,如果直接让用户看见异常信息不友好

改造一下写法:把异常捕获,这样就不会看见异常信息,这里写的有些问题 不应该写Execption,这个异常都所有异常的父类,应该写对应的异常,算数异常是 arithmeticExecption

真正的项目里发生异常该怎么捕获呢?下面就来了解一下全局异常,创建springboot项目

1.创建一个controller包,里面写了一个异常方法,

2.配置swagger-ui来进行接口的访问

 @GetMapping("exception")
 public R exception(){
   throw new RuntimeException("运行异常");
}

结果肯定是报错,但是这个异常是可以人工干预的,避免控制台输出报错信息,或者把报错解释的详细一点

创建一个MyExceptionHandler类,这个类就是来帮我们捕获全局异常的类,

1.在这个类上加上@RestControllerAdvice注解

2.创建一个方法

3.在方法上加上@ExceptionHandler注解中可以添加参数,参数是某个异常类的class,代表这个方法 专门处理该类异常,比如这样:,

@RestControllerAdvice
@Slf4j
public class MyExceptionHandler {
    @ExceptionHandler(value = Exception.class)
    public String exceptionHandler(Exception e){
        log.error("未知异常!原因是:"+e.getMessage());
        return "未知错误!!!";
    }
 }

继续访问异常的接口,没有报错了,返回的结果也我定义的数据

控制台也输出异常信息

到这异常的捕获就完成了,但是我们捕获都是系统自带的异常,我就在想能不能自定义异常,然后进行捕获,开干

实现步骤:

  1. 创建一个枚举进行异常传递
  2. 创建一个自定义的异常类取名叫CustomException,
  3. 在MyExceptionHandler全局异常中把自定义异常捕获

枚举

@Getter
@AllArgsConstructor
public enum RCode {

    SUCCESS(0,"操作成功!"),
    fail(1,"操作失败!"),
    AUTH_ERROR(40411,"用户名或密码不存在!"),
    NO_AUTH_ERROR(40412,"无权访问!"),
    SYS_VALID_ERROR(501,"参数校验错误"),
    SYS_EXCEPTION(2,"模拟异常"),
    INVALID_TOKEN(40410,"Token无效,您无权访问该接口"),
;

    private Integer code;
    private String msg;

}

CustomException类

@Getter
public class CustomException extends RuntimeException{
    private RCode rCode;

    public CustomException(RCode rCode) {
        this.rCode = rCode;
    }

    public CustomException(Throwable cause, RCode rCode) {
        super(cause);
        this.rCode = rCode;
    }
}

在全局异常类中捕获

@RestControllerAdvice
@Slf4j
public class MyExceptionHandler {
    //捕获自定义异常
    @ExceptionHandler(value = CustomException.class)
    public R CustomerExceptionHandler(CustomException e){
         log.error("未知异常!原因是:"+e.getRCode().getMsg());
        return R.error(e.getRCode());
    }
 }

进行测试:首页修改controller中接口抛出的异常 换成我们自己定义的异常类

进行测试:结果

控制台:

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java NegativeArraySizeException异常解决方案

    Java NegativeArraySizeException异常解决方案

    这篇文章主要介绍了Java NegativeArraySizeException异常解决方案,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • JAVA实现双向链表的增删功能的方法

    JAVA实现双向链表的增删功能的方法

    本篇文章主要介绍了JAVA实现双向链表的增删功能的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • Ajax实现省市区三级联动

    Ajax实现省市区三级联动

    这篇文章主要为大家详细介绍了jQuery ajax实现省市县三级联动的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能帮助到你
    2021-07-07
  • Java Instrumentation从概念到基本用法详解

    Java Instrumentation从概念到基本用法详解

    Java Instrumentation是java.lang.instrument包提供的 API,允许开发者在类被JVM 加载时对其进行修改,或者在运行时重新定义类的字节码,本文给大家介绍Java Instrumentation从概念到基本用法详解,感兴趣的朋友一起看看吧
    2025-09-09
  • 如何把Spring Cloud Data Flow部署在Kubernetes上

    如何把Spring Cloud Data Flow部署在Kubernetes上

    这篇文章主要介绍了把Spring Cloud Data Flow部署在Kubernetes上,再跑个任务试试,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • Java构造函数通透理解篇

    Java构造函数通透理解篇

    这篇文章主要介绍了Java构造函数,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • Java有效处理异常的三个原则

    Java有效处理异常的三个原则

    Java中异常提供了一种识别及响应错误情况的一致性机制,有效地异常处理能使程序更加健壮、易于调试。那么这篇文章总结了Java有效处理异常的三个原则,有需要的朋友们可以参考借鉴。
    2016-09-09
  • zookeeper监听器原理的详解

    zookeeper监听器原理的详解

    今天小编就为大家分享一篇关于zookeeper监听器原理的详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • Jmeter如何添加循环控制器

    Jmeter如何添加循环控制器

    这篇文章主要介绍了Jmeter如何添加循环控制器,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • Spring Security 实现多种登录方式(常规方式外的邮件、手机验证码登录)

    Spring Security 实现多种登录方式(常规方式外的邮件、手机验证码登录)

    本文主要介绍了Spring Security 实现多种登录方式(常规方式外的邮件、手机验证码登录),文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01

最新评论