SpringBoot 异常处理
异常体系
- 首先分为两类:检查异常(开发者必须捕获或者抛出该异常)、非检查异常(Error、运行时异常)
- Error:内存溢出、文件损坏、服务器宕机等
- 编译时异常:编译失败;例如文件找不到、SQLException、IOExcetion、类找不到等
- 运行时异常:主要是代码逻辑错误,例如数组越界访问、空指针、除数为0等
异常打印的常用函数
// 异常原因
e.getMessage()
e.getCause().getMessage()
// 打印栈信息
printStackTrace()
针对检查异常的两种处理方式
方式一
try-catch-finally捕获
注:
- 只有当在 try 或者 catch 中调用退出 JVM 的相关方法,例如 System.exit(0) ,此时 finally 才不会执行,否则 finally 永远会执行。
- 如果finally 块中有 return 关键字,那么 try 块以及 catch 块中的 return 都将会失效,所以在开发的过程中不应该在 finally 块中写 return 语句
public String index(){
try{
...... //可能产生异常的代码 }
catch( ExceptionName1 e ){
...... //当产生ExceptionName1型异常时的处置措施 }
catch( ExceptionName2 e ){
...... //当产生ExceptionName2型异常时的处置措施 }
finally{
...... //无论是否发生异常,都无条件执行的语句
}
}
方式二
抛出异常
注:
- 检查异常不会自动向上抛出,必须显式处理;非检查异常会自动向上抛出,直到被捕获或者程序终止;
- 至于方法上的throws关键字,则是java强制要求抛出编译时异常时需要声明,抛出运行时异常时不强制声明;
public String index() throws IOException {
throw new IOException("test");
}
自定义异常
public class MyException extends RuntimeException{
public MyException() {
super();
}
public MyException(String message) {
super(message);
}
}
try-with-resources
关闭资源
全局异常处理
@ControllerAdvice:使用该注解表示开启了全局异常的捕获;
参考链接
【3】全局异常处理Demo
标签:
Java
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)