springboot异常统一处理_SpringBoot中的统一异常处理

在互联网时代,不管是面向广大用户的应用、WEB,还是公司内部管理系统,如果有了异常,而没有正确的去处理,那么出现的500服务器错误,那是非常不友好的,不友好的出现异常错误,都会可能导致用户的流失,程序中的bug导致的服务器错误是不可避免的,那么我们就要统一捕获这些异常来给用户展现友好的界面来提高用户体验,今天就来介绍一下SpringBoot的异常处理方式!

0c745646bb6d757ff2441294b0c4eabc.png

启动一个简单的SpringBoot应用,正常访问一下:

98d188c43f96b35f06e0ac9f1dcde32e.png
1c90a87657008a064a11b347638179d2.png

如果在这个方法中插入一段异常代码,会发生什么事情呢?

1f513941f74c04bdb604d361d55721ee.png
555eb3cf2c99946a0609ea75a35074f0.png

出现上面的异常错误页面,对于用户来说是很不友好的,对于你的领导来说,你是致命的,那么我们就要统一的捕获这些异常,来给用户展示比较友好的界面,不要因为咱们的失误来导致用户流失,就像春运时到12306网站去抢票,明明网络状况良好,而它的系统承受能力达不到,它还是会给你统一恢复:当前网络状况不好。

对于异常处理,我们可以在对应的方法中捕获异常,然后进行异常处理,但是这样每一个方法都这样捕获异常进行处理,从代码整洁度来看是不可取的,对于这种处理方式也会让工作显得繁重。而SpringBoot开发利器就提供了这样的注解,来统一处理异常,这个注解就是@ExceptionHandler,我这里就不用漂亮的页面作为异常捕获展示,就用字符串作为展示捕获异常处理页面。

在需要捕获异常的Controller中加入如下代码,那么访问异常的URL就会出现友好的提示:

224df5deea3e7f5f24568377078e7612.png

注解@ExceptionHandler用来注解处理异常的方法,value属性表示处理的异常类型,如果在一个Controller中有一个用@ExceptionHandler修饰的方法,当Controller的任何一个方法抛出异常时,都会由@ExceptionHandler注解修饰的方法处理异常,而不会抛给servlet容器。

注意,上面说的时在一个Controller中,那么在另外的一个Controller中有了异常,会捕获吗?

058af2afbcb3041c06844edcd2a382c9.png
c7dea4cb1ed581b9075cfe7debcbed45.png

可以看出,通过@ExceptionHandler注解修饰的方法处理异常,只在当前Controller中生效,广大的码友同志们都会脑洞大开,会给出一个方案,那就是写一个父类,在父类中写捕获异常的方法,然后子类继承父类,那么所有的子类都会有处理异常的能力了,这样不失为一个好办法,但如果忘了继承父类,那么也会出现不友好的异常页面,不用着急,不用气馁,SpringBoot也为我们提供这样机制,来统一处理异常。

d253702867c40112497df7d3c50497ed.png

那就是配合使用注解@ControllerAdvice,@ControllerAdvice注解的类就是当前项目中所有类的统一异常处理类,@ExceptionHandler注解的方法用来定义函数针对异常类型以及异常如何处理,不用在每个Controller中逐一定义异常处理方法了。代码示例如下:

c6febc7f01d79a2ff68d34cb680a9a03.png

这样不用在其他Controller中定义了,访问如下:

5f11129028e0e18d45b0b84901fc802d.png
a6c28f76997dc00f7ea995cfdcea0c2d.png

这样做异常处理,再也不用担心出来不友好的异常信息了!整个人的心情都变好了!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SpringBoot,可以通过编写全局异常处理器来实现异常统一处理。通过引用[1]的示例代码,我们可以了解到如何编写一个全局异常处理器。 首先,在代码添加`@ControllerAdvice`注解,标记这是一个全局异常处理器类。然后,使用`@ExceptionHandler`注解来定义具体的异常处理方法。在示例代码,有两个异常处理方法:`error`方法用于处理系统异常,`divError`方法用于处理自定义异常(`YyghException`)。 在`error`方法,我们可以通过`Exception`参数来捕获系统异常,并在方法内部进行相应的处理。在示例代码,我们打印了异常堆栈信息,并返回一个失败的结果对象(`Result.fail()`)。 在`divError`方法,我们可以通过`YyghException`参数来捕获自定义异常,并返回一个自定义的结果对象(`Result.build(e.getCode(), e.getMessage())`)。这样,当系统抛出`YyghException`时,就会被该方法捕获并返回相应的结果。 通过编写这样的全局异常处理器,可以实现对系统所有异常统一处理,使得异常信息更加统一、友好,并可以根据实际需求进行相应的处理操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [SpringBoot逻辑异常统一处理方法](https://download.csdn.net/download/weixin_38705004/12745762)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [SpringBoot如何进行统一异常处理](https://blog.csdn.net/a648119398/article/details/122772574)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值