⭐简单说两句⭐ 作者:后端小知识 CSDN个人主页:后端小知识 🔎GZH:后端小知识 🎉欢迎关注🔎点赞👍收藏⭐️留言
⭐简单说两句⭐
作者:后端小知识
CSDN个人主页:后端小知识
🔎GZH:
后端小知识
🎉欢迎关注🔎点赞👍收藏⭐️留言📝
亲爱的友友们,我们今天来讲一讲SpringBoot的全局异常处理吧😎
全局异常指的是在程序运行过程中发生的非预期异常,这些异常可能会导致程序崩溃或出现错误结果。全局异常处理机制可以捕获这些异常并进行相应的处理,如记录日志、提示用户等,从而提高程序的可靠性和稳定性。
【Tips】:我们这里的实现采用**@RestControllerAdvice与@ExceptionHandler**的方式进行实现,当然,读者们也可以自行根据切面去进行实现的啦😁
我们先定义一个自定义异常(读者们可以看情况定义,也可以不定义哈)
我们这里写得比较简洁,可以根据自己的业务进行定义的哈
public class MyException extends RuntimeException{ public MyException(String message) { super(message); }}
自定义异常定义好了后,我们就需要定义全局异常处理器了
我们先上代码,然后再来解释
@RestControllerAdvice@Slf4jpublic class GlobalExceptionHandler { @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
@Servicepublic 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
,打印日志如下
调用接口 /exception/v1/global/al
,打印日志如下
好了,我们来看个对比
看了这个对比,你应该知道怎么选了吧😋
全局异常可以减少大量的try catch语句,用了全局异常后,不用自己去try catch捕获异常了,直接走全局通用的捕获逻辑,当然,如果有特殊情况需要try catch捕获异常的话,那也是可以的,比如我们的自定义异常一般都是得手动捕获抛出异常
OK,我们接下来总结一下全局异常的优缺点吧
优点:
缺点:
【都看到这了,点点赞点点关注呗,爱你们】😚😚
结语
谢谢你的阅读
,由于作者水平有限,难免有不足之处,若读者发现问题,还请批评,在留言区留言或者私信告知,我一定会尽快修改的。若各位大佬有什么好的解法,或者有意义的解法都可以在评论区展示额,万分谢谢。
写作不易,望各位老板点点赞,加个关注!😘😘😘
💬
作者:后端小知识
CSDN个人主页:后端小知识
🔎GZH:后端小知识
🎉欢迎关注🔎点赞👍收藏⭐️留言📝
来源地址:https://blog.csdn.net/m0_46833224/article/details/133751023
--结束END--
本文标题: SpringBoot全局异常处理 | Java
本文链接: https://www.lsjlt.com/news/429147.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-04-03
2024-04-03
2024-04-01
2024-01-21
2024-01-21
2024-01-21
2024-01-21
2023-12-23
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0