00:00
各位同学大家好,下面呢,咱们继续往下来学习,前面呢咱们完成了讲师管理后端接口开发,下面呢,咱们来学习下一个内容,下一个内容是什么呢?它叫做统一异常处理,那什么叫统异常处理,给各位做个说明。大家注意啊,比如说我现在在程序运行过程中出现了异常,而出现异常之后,它是不是会有一些异常信息返回啊,但这个返回跟咱们要求的格式不一样,因为之前我提到过,我们要求所有接口返回的是不是都是统一的结果,就算有异常让它也回咱们统一结果,但是目前呢,这里边有异常,它反应就不是我们结果,也就不是这个对象,那这里边我们需要做这么一个处理,也就是说让所有异常都返回咱们统一的这么一个结果。这个就叫统一异常处理,那这里边是什么样子,咱首先先做一个效果的测试。
01:06
比如现在啊,我就在方法中,咱们先模拟一个异常,让大家看一下我们目前的场景,我们先做一个模拟。那模拟异常呢?我写一个简单模拟,比如这个最简单的就是除以零。肯定会有异常出现,那现在我把这个做测试,咱们一会儿通过swag把这个接口测试,看它目前是什么样的效果,是各位能想到,如果正确的话,那造的是咱们统一的这个结果,但是目前呢,在里边我们加了一个异常,所以它会有异常的这么一个产生。那在下面试一下啊呃,这个去掉了,把它删掉啊,然后咱们启动我们当前的这个项目。这个我先拿掉,咱们等它启动,然后启动之后我通过swag我们来做这么一个访问啊,咱们访问一下啊。
02:00
Local house的8301加上swagger-UI。点HTML回车,然后进入到我们接口中,找到刚才那个查询所有讲师,然后咱们执行看一下目前效果。大家看啊,他返回的是这么一个结果,这是他返结果。这个结果跟咱们要求的格式是不一样的,而这个格式如果你反回的话,在前端还需要做特别处理,所以咱们要是一个效果,让这里边不管程序有没有异常出现,都返回咱们统一的格式,也就是都是按照伪造的这个格式进行返回,目前它是报这个错啊,就是里边你看这错说它不等等于零,所以咱们下面。把这个做个解决,那怎么解决,给各位讲解一下,首先我们的做法就是呢,其实用的还是死人里边的知识,在死文里边有个东西,这个东西叫exception handle异常处理器,它能够根据异常做相的处理,那下面咱们看一下这个到底该怎么去做。
03:11
我在这里边给各位同学写一下啊,统一。异常处理,各位记住啊,统一异常处理有三种情况,首先第一种情况叫全局异常处理,我先都写出来,然后给各位同学都会做解释,并且都会做演示。另外第二种情况,它叫做特定异常处理。除此之外,还有第三种情况叫做自定义异常处理。像这里自定义异常处理,这是异常处理的三种情况,那三种情况分别什么意思?咱们先做个说明,首先大家看第一个全局,什么叫全局?就是你不管什么异常,比如你是控指针还是数左下标越界,还是零,不做除数,只要是异常,那都执行这个处理,这叫旋异常处理。第二个叫特定,什么叫特定?比如现在我出现空指针异常,实现一种处理方式,我出现了数组下标越界,实现另一种方式,就是针对不同异常做不同处理,这叫特定异常处理。
04:23
另外还有第三个叫自定义,就是咱可以自己写异常,然后自己手动把异常抛出,以上就是三种情况,下面给各位分别来演示一下,咱们看怎么做。首先我写一下啊,咱先说第一种情况,全局,那怎么实现呢?写这里啊,首先我们的第一步先创建一个异常处理的这么一个类,这个类我们创建,因为咱们项目中会有很多模块,最后把这部分呢,就在创建在还是咱那个common里边那个service模块中,还是在这里边做统一的创建。
05:04
我写一下啊。在common下边的里边创建一个异常处理类,这是咱的第一步,然后创建之后我们的第二步。写下啊,就是第二步。啊,这应该是步啊,第一步,第二步,然后第二步怎么做呢?咱们在这个异常处理类上边添加上一个注解,这注解目的把这类在咱项目中能够用到,那加什么注解,就是它的底层呢,使用到一个原理,就是死中这个A的原理进行添加,这个注解名字叫controller advice啊,咱先写上,一会咱会加上啊,Controller advice。DVI把这个加上,然后它底层用到了a op PA,什么叫a op PA,带着各位复习一下,这是死维里面的知识啊,如果你v op还不是特别理解,可以关注上归谷古励学外有关于死针对a op的讲义讲解,这里边我来重复一遍啊,什么叫A?
06:15
A呢,说的简单点,它叫做面向切面编程。我想这里啊,面向切面边长,什么叫面向切面,说到最直接点,就是咱们在不改变。源代码的情况下。像这里啊,源代码的情况下。我们可以增加一个新的功能。或者说在之前功能上做一个增强。这么写啊,就是增强我们的功能,这个就叫A,在不改变源代码情况下,可以让你的功能更加强大,咱目前这个注解用到就是A思想,就是我之前代码不需要做特别的改变,咱们通过注解就可以把这个异常处理加到咱们现有功能中来,这个就叫up op一会儿才会实现,然后这个之后我们的第三步。
07:13
写下啊第三步。咱们的做法就是在这个异常处理类里边。我们编写你具体针对异常的这个处理方法,在方法上边我们也需要添加上一个注解,这个注解就叫做exception handler,我写一下啊,这个注解。Exception handler。就是异常处理器。然后里边指定异常做相应的处理,所以以上是它的一个基本步骤,下面呢,我们就按照这个步骤把这个异常处理加到咱的项目中去,各位记住啊,它底层用到了a op思想,在不改变源代码情况下,就可以增强你的功能,或者说增加一个功能,那咱做个实现。
08:07
首先我写一下啊。我们的第一步,咱们在common里边加上一个异常处理类,因为咱后面有别的模块中也需要用到,所以我加到这里边。然后在这个位置,首先我先建个包,这个包就叫exception。创建,创建之后里边写上一个类。这个类我给它起个名字啊,这个名字我就跟课件中保持一致了,我看一下啊,这个名字exception handle,咱们也叫这个类。这是我们创建一个类,然后创建之后在类上边我们加上一个注解,这个注解叫controller advice,它底层用到了A,通过a op方式在现有功能中加上一个异常处理,而现有功能代码不需要做什么改变,这是我们建立一个类。
09:02
然后记完之后,下面呢,咱们写这个具体异常处理的方法,第一个咱们叫全局异常处理,那我来写个方法,咱们看怎么做啊,我加上一个。Public加上result,因为咱们刚才提到,不管有没有异常,咱们也都用result结构返回方法,我起个名字,比如说我叫A。这是咱们加一个方法,然后方法里边最终我做个输出。就是点上这个fire。包括咱可以为了明确加上一个message,我写一下执行了选举异常处理,为了咱们测试更加方便。所以以上写一个方法,当然各位注意啊,我这么写之后呢,这个方法目前它并不会执行,它只一个方法定义,加上他要执行,要针对异常进行执行,那怎么做方法上边加上一个注解,叫1EXCEPTION handle的,你注意啊,是什么里边封装的。
10:11
异常处理器,然后里边指定你针对哪个异常处理,因为咱是全局,所以加上一个叫一个exception d class,因为异常都记成它,所以咱加上它之后,当我有异常这一方法都会进行执行啊,这是我们写到的,然后这个异常信息你也可以做个输出。我加个session。这个咱们也输出一下,所以现在就完成了,但是完成之后呢,还有一个问题。大家注意啊,咱之前呢,曾经写过这个注解,Rest controller,这个注解中是不是有一个response body会反数据,但是现在我这个类并不是control,没有right control,而我这方法虽然能执行,但是我这句话它不会返回这次数据,咱让他要返回这份数据,所以咱就需要在方法上边是不是需要再加个注解,这个注解。
11:07
Response底,让他能返回这数据。所以以上就是咱们完成的这个异常处理类的这么一个创建,当你有异常产生,这里边方法会执行,然后按照咱们伪造的结构会进行输出,这个咱们就加上了。而大家注意啊,我加这过程的之后,我们发现咱们之前代码好像没有做什么变化,是不是只是加了这个类,然后异常的加进去,因为它用到了a op这四项,就是我刚才一直提到的不改变原代码情况下,增强你的功能,现在这就完成了,完成之后咱们来试一下,看一下结果。我把服务器启动,咱把这个最终测出来,看一下它的效果怎么样啊,等它先修起来。
12:01
然后启动之后,咱们还是用刚才那个swa做个处理啊,那我现在我继续执行。然后各位看啊,在里边你看啊,返回数据是不是叫执行了全局异常处理,是不是就是我刚才写的这句话,异常信息,我这里边也做了一个输出。所以以上啊,咱就把这个全局异常处理就加到了咱们的项目中去,各位把这过程给他记住,能准确加到你的项目中去,这个咱就完成了。
我来说两句