SpringBoot全局异常处理 | Java
创始人
2025-01-09 18:09:07
0

简单说两句

作者:后端小知识

CSDN个人主页:后端小知识

🔎GZH后端小知识

🎉欢迎关注🔎点赞👍收藏⭐️留言📝

文章目录

  • ✨SpringBoot全局异常处理 | Java
      • 🎨什么是全局异常?
      • 🍖如何使用全局异常
      • 🎯全局异常优缺点

image-20231010164732205

✨SpringBoot全局异常处理 | Java

亲爱的友友们,我们今天来讲一讲SpringBoot的全局异常处理吧😎

🎨什么是全局异常?

全局异常指的是在程序运行过程中发生的非预期异常,这些异常可能会导致程序崩溃或出现错误结果。全局异常处理机制可以捕获这些异常并进行相应的处理,如记录日志、提示用户等,从而提高程序的可靠性和稳定性。

🍖如何使用全局异常

【Tips】:我们这里的实现采用**@RestControllerAdvice@ExceptionHandler**的方式进行实现,当然,读者们也可以自行根据切面去进行实现的啦😁

我们先定义一个自定义异常(读者们可以看情况定义,也可以不定义哈)

我们这里写得比较简洁,可以根据自己的业务进行定义的哈

public class MyException extends RuntimeException{     public MyException(String message) {         super(message);     } } 

自定义异常定义好了后,我们就需要定义全局异常处理器了

我们先上代码,然后再来解释

@RestControllerAdvice @Slf4j public class GlobalExceptionHandler {     /**      * 这里的return 信息会返回给前端      */     @ExceptionHandler(MyException.class)     public String handleMyException(MyException e) {         log.error("自定义MyException异常信息:{}", e.getMessage());         return e.getMessage();     }      @ExceptionHandler(RuntimeException.class)     public String handleMyException(RuntimeException e) {         log.error("运行时异常信息:{}", e.getMessage());         return e.getMessage();     }      @ExceptionHandler(ArithmeticException.class)     public String handleMyException(ArithmeticException e) {         log.error("算术异常信息:{}", e.getMessage());         return e.getMessage();     } } 

【Tips】

@ExceptionHandler用这个注解来定义捕获什么样的异常。当抛出这些异常时,就会调用对应的方法。

return的内容将会返回给前端

当代码中出现算术异常时,日志会打印 算术异常信息:具体异常信息,并不会打印 运行时异常的日志,如果我们没有捕获ArithmeticException异常的这个方法的话,那么就会被RuntimeException捕获,会打印运行时异常:具体异常信息

OK,我们接下来写Service的代码,这里方便演示,写得比较简洁,我就没有写dao层什么的连接数据库了,友友们在实践的时候可以试一试呢😁

LearnExceptionService

public interface LearnExceptionService {     /**      * 学习全局异常处理-自定义异常      */     Object learnException();      /**      * 学习全局异常处理-算术异常      */     Object learnAlException(); } 

返回类型友友们根据具体情况写额,我这里写Object只是为了方便演示

接口实现

LearnExceptionServiceImpl

@Service public class LearnExceptionServiceImpl implements LearnExceptionService {     /**      * 学习全局异常处理      */     @Override     public Object learnException() {         System.out.println("hello");         throw new MyException("学习全局异常处理");     }      /**      * 学习全局异常处理-算术异常      */     @Override     public Object learnAlException() {         int i = 1 / 0;         return i;     } } 

然后Controller层调用service层

LearnExceptionController

@Api("学习全局异常处理") @RestController @RequestMapping("exception") public class LearnExceptionController {     @Resource     private LearnExceptionService learnExceptionService;      /**      * 学习全局异常处理-自定义异常      */     @GetMapping("v1/global")     public Object learnException() {         return learnExceptionService.learnException();     }      /**      * 学习全局异常处理-算术异常      */     @GetMapping("v1/global/al")     public Object learnTheException() {         return learnExceptionService.learnAlException();     }  } 

好咯,代码大工告成,接下来我们启动服务调用接口吧😛

调用接口 /exception/v1/global,打印日志如下

image-20231010145314336

调用接口 /exception/v1/global/al,打印日志如下

image-20231010145550769




好了,我们来看个对比

image-20231010161342481

看了这个对比,你应该知道怎么选了吧😋

全局异常可以减少大量的try catch语句,用了全局异常后,不用自己去try catch捕获异常了,直接走全局通用的捕获逻辑,当然,如果有特殊情况需要try catch捕获异常的话,那也是可以的,比如我们的自定义异常一般都是得手动捕获抛出异常

OK,我们接下来总结一下全局异常的优缺点吧

🎯全局异常优缺点

优点:

  • 统一异常处理:可以集中处理所有类型的异常,使得代码更整洁,易于维护。
  • 提供更好的用户体验:可以为用户返回友好的错误信息,而不是展示复杂的技术错误。

缺点:

  • 灵活性有限:如果某些特定类型的异常需要特殊处理,那么全局异常处理可能不是最佳选择。
  • 隐藏了一些重要的错误细节:对于开发人员来说,全局异常处理可能会掩盖一些关于异常具体位置和原因的信息。

【都看到这了,点点赞点点关注呗,爱你们】😚😚

抽象工厂 引导关注

结语

谢谢你的阅读,由于作者水平有限,难免有不足之处,若读者发现问题,还请批评,在留言区留言或者私信告知,我一定会尽快修改的。若各位大佬有什么好的解法,或者有意义的解法都可以在评论区展示额,万分谢谢。
写作不易,望各位老板点点赞,加个关注!😘😘😘

💬

作者:后端小知识

CSDN个人主页:后端小知识

🔎GZH后端小知识

🎉欢迎关注🔎点赞👍收藏⭐️留言📝

相关内容

热门资讯

透视辅助!德普之星辅助器怎么用... 透视辅助!德普之星辅助器怎么用,微信开心是按照辅助脚本(透视)开挂辅助器扑克教程《详细加薇13670...
详细开挂!hhpoker透视工... 详细开挂!hhpoker透视工具(透视)拱趴大菠萝辅助神器(攻略方法开挂辅助工具)1、下载安装好拱趴...
通报开挂!天天微友挂,wepo... 通报开挂!天天微友挂,wepoker辅助器安装包,必赢教程(有挂教学)-哔哩哔哩wepoker辅助器...
原本有开挂"大头大菠... 原本有开挂"大头大菠萝辅助"详细开挂辅助安装揭秘有挂(wpk教程)1、下载安装好大头大菠萝辅助,进入...
透视智能ai!德普辅助软件,微... 较多好评“微乐万能挂官网”开挂(透视)辅助教程 了解更多开挂安装加(136704302)微信号是一款...
推荐辅助!手机填大坑辅助器(透... 推荐辅助!手机填大坑辅助器(透视)wepoker私局代打(德州教程开挂辅助脚本)>>您好:软件加13...
正品开挂!四川麻将血战到底定制... 四川麻将血战到底定制插件辅助是一款可以让一直输的玩家,快速成为一个“必胜”的ai辅助神器,有需要的用...
最初有开挂"途游辅助... 最初有开挂"途游辅助软件网站"详细开挂辅助工具有挂技术(AI教程)途游辅助软件网站ai黑科技系统规律...
透视玄学!微信小程序家长大贰辅... 透视玄学!微信小程序家长大贰辅助工具,wepoker轻量版透视系统(透视)开挂辅助插件必赢方法>>您...
传授辅助!潮友潮汕木虱开挂辅助... 传授辅助!潮友潮汕木虱开挂辅助器下载,wepoker轻量版透视方法,软件教程(确实有挂)-哔哩哔哩;...