springboot捕获全局异常实现过程
学习目标
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 "未知错误!!!";
}
}
继续访问异常的接口,没有报错了,返回的结果也我定义的数据

控制台也输出异常信息

到这异常的捕获就完成了,但是我们捕获都是系统自带的异常,我就在想能不能自定义异常,然后进行捕获,开干
实现步骤:
- 创建一个枚举进行异常传递
- 创建一个自定义的异常类取名叫CustomException,
- 在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异常解决方案,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下2021-08-08
Java Instrumentation从概念到基本用法详解
Java Instrumentation是java.lang.instrument包提供的 API,允许开发者在类被JVM 加载时对其进行修改,或者在运行时重新定义类的字节码,本文给大家介绍Java Instrumentation从概念到基本用法详解,感兴趣的朋友一起看看吧2025-09-09
如何把Spring Cloud Data Flow部署在Kubernetes上
这篇文章主要介绍了把Spring Cloud Data Flow部署在Kubernetes上,再跑个任务试试,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2020-08-08
Spring Security 实现多种登录方式(常规方式外的邮件、手机验证码登录)
本文主要介绍了Spring Security 实现多种登录方式(常规方式外的邮件、手机验证码登录),文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2022-01-01


最新评论