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实现的n*n矩阵求值及求逆矩阵算法示例

    java实现的n*n矩阵求值及求逆矩阵算法示例

    这篇文章主要介绍了java实现的n*n矩阵求值及求逆矩阵算法,结合具体实例形式分析了java基于数组的矩阵定义、遍历、运算等相关操作技巧,需要的朋友可以参考下
    2017-09-09
  • Java如何获取一个IP段内的所有IP地址

    Java如何获取一个IP段内的所有IP地址

    这篇文章主要为大家详细介绍了Java如何根据起始和结束的IP地址获取IP段内所有IP地址,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-11-11
  • Java出现:JWT strings must contain exactly 2 period characters. Found: 0的常见原因及解决方案

    Java出现:JWT strings must contain exactly&

    这篇文章主要介绍了JWT令牌解析失败的原因和解决方法,包括Header、Payload和Signature三段式结构,常见错误原因,通用解决方案以及额外注意点,需要的朋友可以参考下
    2026-01-01
  • Spring使用 AsyncConfigurer 自定义线程池实现高效异步任务管理

    Spring使用 AsyncConfigurer 自定义线程池实现高效异步任务管理

    Spring框架的@Async注解虽然提供了异步任务支持,但默认线程池不适合生产环境,通过自定义线程池配置类实现AsyncConfigurer接口,可以统一管理线程池参数,解决企业级应用中线程爆炸、拒绝策略和可观测性等问题,下面就来介绍一下如何实现
    2026-02-02
  • Java多线程之多种锁和阻塞队列

    Java多线程之多种锁和阻塞队列

    今天带大家学习的是Java多线程的相关知识,文章围绕着java多种锁和阻塞队列展开,文中有非常详细的介绍,需要的朋友可以参考下
    2021-06-06
  • SpringBoot如何指定某些类优先启动

    SpringBoot如何指定某些类优先启动

    这篇文章主要介绍了SpringBoot如何指定某些类优先启动,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • mybatis中的count()按条件查询方式

    mybatis中的count()按条件查询方式

    这篇文章主要介绍了mybatis中的count()按条件查询方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • Eclipse安装Aptana插件(注意对应版本问题)

    Eclipse安装Aptana插件(注意对应版本问题)

    这篇文章主要为大家详细介绍了Eclipse安装Aptana插件的相关资料,特别注意对应版本问题,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-02-02
  • java在cmd运行"-d"和"-cp"参数解读

    java在cmd运行"-d"和"-cp"参数解读

    这篇文章主要介绍了java在cmd运行"-d"和"-cp"参数用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • Maven的使用和配置国内源的保姆级教程

    Maven的使用和配置国内源的保姆级教程

    Maven是⼀个项目管理工具,基于POM(Project Object Model,项目对象模型)的概念,Maven可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件,很多新手还不够了解maven,所以本文给大家讲解Maven的使用和配置,需要的朋友可以参考下
    2025-04-04

最新评论