珠海市网站,旅游网站的设计与建设,百度网站免费优化软件下载,广州 营销型网站建设⭐简单说两句⭐ 作者#xff1a;后端小知识 CSDN个人主页#xff1a;后端小知识 #x1f50e;GZH#xff1a;后端小知识 #x1f389;欢迎关注#x1f50e;点赞#x1f44d;收藏⭐️留言#x1f4dd; 文章目录 ✨SpringBoot全局异常处理 | Java#x1f3a8;什么是全局…⭐简单说两句⭐ 作者后端小知识 CSDN个人主页后端小知识 GZH后端小知识 欢迎关注点赞收藏⭐️留言 文章目录 ✨SpringBoot全局异常处理 | Java什么是全局异常如何使用全局异常全局异常优缺点 ✨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 {/*** 学习全局异常处理*/Overridepublic Object learnException() {System.out.println(hello);throw new MyException(学习全局异常处理);}/*** 学习全局异常处理-算术异常*/Overridepublic Object learnAlException() {int i 1 / 0;return i;}
}然后Controller层调用service层
LearnExceptionController
Api(学习全局异常处理)
RestController
RequestMapping(exception)
public class LearnExceptionController {Resourceprivate 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后端小知识
欢迎关注点赞收藏⭐️留言