00:00
各位同学大家好,刚才呢,我们完成了角色管理的增删改查接口,那下面呢,我们继续往下来做,下面咱们学什么呢?我们来看一下,给大家讲解一个内容,叫做统一异常处理,那什么是统异常处理,给各位先做个介绍,那咱们随便找一段方法,咱们来测试一下。比如说现在啊,我在方法中呢,我加上一个注释,咱们做件事情就是模拟一个异常的这么一个效果。咱做一个模拟。而怎么模拟很简单。咱们让这个值。除以零就可以了,那大家想一下啊,如果说现在我这个接口方法一执行,它会怎么样,是不是肯定会报错呀,而报错之后里边应该有一个异常信息的出现,但是现在这个信息并不是咱们想要的结果,咱们先测时间看一下,然后说明我们想要什么样的结果。
01:03
等这个执行,然后咱们来到接口中,我先刷新。找到接口里边,咱们直接做一个测试,大家看目前返回的是一个500的一个错误,而我现在我想做个效果,什么效果,不管你程序啊,是正常执行还是抛出异常,我们让他都怎么样,都返回咱们相同,这个就是结果,也就是说啊,都返回咱们这个结构就跟它的效果都是一样的,但是目前你看,因为咱们没有做处理,它的效果跟咱们正常的结构是不一样的,所以咱们要完成这个效果,让所有接口都返回相同格式数据,不管有没有异常,它的数据格式都是一样的。所以下面咱就来做这个事情,那怎么做,给各位做一个说明,我这里来写一下。
02:01
然后咱们写什么呢?我强调啊,我们做这个统一异常处理,它分成有三类,第一类叫做全局异常处理,我先写,然后我分别解释,然后第二个叫什么叫做特定异常处理,另外还有第三个,它叫做自定义异常处理,所以咱们有三种方式,那三种什么意思,分别说一下,首先说第一个全局,什么全局,比如我现在啊,只要我出现异常,都会执行这个处理。这叫全局,比如说不管你是控制帧还是什么数字调幅越界,只要是异常都会进行这个处理,然后第二个叫特定,什么叫特定?就是针对你特定的异常进行处理,大家注意,比如我刚才这个异常是除以零的异常,包括工指针,每个异常做特别的处理,这个叫特定异常处理。然后除了这个之外,还有第三个叫自定义,就是咱们自己来编写一个异常类,然后咱们手动。
03:14
来抛出这个异常。用它来做个处理,所以以上就是三种方式,全局特定,还有自定义,那这方式怎么做?给各位先做个介绍,其实做法很简单,咱们直接加个注解就可以实现。大家看啊,第一个注解controller advice,其这个注解底层用到了a op思想,然后第二个叫异常处理器,一个exception handle,因为咱们要返回这个数据,所以加一个方body,所以通过它来做一个统一的处理。那下面给各位来做一个演示,咱们看到底该怎么去用,那咱们直接写代码。首先第一个我先演示全局,那怎么做呢?咱们就来到这个里边,在这里边呢,我们创建一个异常处理这个类,首先我在里边我先建个包。
04:14
我写一下com.at system,加上一个叫exception。把这个创建,然后在里边呢,创建一个类。创建类之后呢,在类上边咱们加上一个注解,这个注解叫做controller advice,表示通过A方式把这个注解就是在里边加上,然后加上异常处理。然后加上之后呢,我们先写第一个,就咱说那个叫全局异常处理,那怎么做,首先我加个方法public result。然后方法名字我叫啊,但是名字你可以随便起。然后在A里边我们加上一个异常,就这个exception。
05:04
在下面咱给他直接一下result,点上这个file,为了咱们更明确,我把message信息给他改一下,执行了全局异常处理。所以现在这个方法我们就创出来了。但是各位注意啊,这些方法创建之后呢,它并不会执行,咱们需要在方法上加上一个注解,叫exception handle异常处理器,这是里边封装的一个处理器。然后在里边指定你异常的class,因为咱是全局嘛,所以我加上except,表示所有异常都是这这个方法,另外大家注意啊,因为我这个return呢,是反一个Jason格式,但是你现在不是在control中也没有加上咱说那个rest controller就是没有加。
06:00
这个注解,所以它里边虽然能退,但是不会返回Jason格式数据,所以在在方法上需要再加一个注解,这注解名字叫response body,表示返回帧的数据。所以咱们这么做之后,就把全局异常处理完成了,当你有异常出现,就会调用方法,最终返回跟其他接口相同的结果,这就叫做全局异常处理。然后洗完之后,咱们把服务器启动,我们来做一个最终的测试,看一下什么效果。现在服务器已经启动了,然后咱们在接口中做个刷新,把刚才接口我直接发送大家看里边提出我们执行了是不是叫全局异常处理,所以这就是第一个演示叫全局异常处理,这个咱们就说到这里,然后这个之后呢,下面还有两个,一个叫特定,一个叫自定义,所以下面呢,咱们快速演示一个特定。
07:01
当然在写的时候呢,这个位置你也可以把那个异常的信息做个打印,当然也可以不打印,看你的实际,然后下面我们写个特定,特定怎么做呢?跟全局类似,这里边我写一下。首先,我还是来一个public result。加上一个叫A啊,当然你可以叫别的名字,然后在AR里面注意啊,目前不加exception,加上你特定的异常的class,大家注意我刚才异常是不是这个就是零,不能做除数异常,所以你把这个加进去。然后在里边我们同样做一个这部分我就复制了。因为上面是一样的,这是名字咱改一下叫特定异常处理,然后加上之后在里边我们写一下。角D位置第二个特定。
08:02
异常处理,然后里边加上一个叫一个exception handle,加上异常的class,就是不能除以零这个异常的,然后同样加上一个叫response到底。现在这个就完成了,完成之后我们做个测试,但是测试之前大家想一个问题啊,你看啊,我现在是不是有全局,有特定,两个是不是都有,然后我执行的时候,一会儿是怎么执行,是全局还是特定,还是两个都执行,还是他们有怎么样一个顺序,咱为了明确我在里边啊,做一个输出,这就是全局。咱们输出一下,然后下面这个就叫特定,咱们看一下它是怎么执行的,是两个都执行,还是某一个还是怎么样。咱给它重新系统一下,然后最终试一下啊,这就是特定异常处理,只有你的具体异常进行实现,如果不指定,那就是全局。
09:12
现在启动,然后咱们试一下啊,看一下效果,我这里边刷新。点击发送,你注意是不是特定了啊,这里提示特定,然后看控制台的输出,大家看效果啊,你发现只执行了什么,是不是特定,也就是全局,你看到是没有执行,所以这就是他一个特点,所以通过它我们总结出结论,这是怎么执行的呢?给大家总结一下啊,如果说有异常出现,他先找一下有没有异常对应的方法,有的话执行,如果没有的话,执行是不是就是全局以上就是全局异常,还有特定异常处理,这个咱们就演示到这里。
我来说两句