00:00
各位同学,刚才呢,咱们完成了角色管理的机关接口,那下面呢,我们来继续往下来看,首先我们先解决一个小问题,然后再来讲解一个新的内容,叫做统一异常处理,那咱看一下解决什么问题啊,首先我现在服务器是启用状态,那我们来到这里边。比如说我现在啊,找到一个接口,咱就找这个查询所有接口,现在我点击调试,点击发送,大家看数据是可以查到,这么看没有问题,但是咱们仔细看,大家看这个时间,我们发现啊,这个时间呢,虽然说能显示,但是咱发现这个时间跟咱们当前的时间好像不一样,另外它的格式也不是我们自己习惯格式,因为咱们习惯什么格式,年月日小时分秒,而这里边多了一个什么,是不是多了一个T啊,那什么意思呢?给大家解释一下啊。首先第一个这个时间是没有错的,只是它显示的不是当前市区,各位同学都清楚啊,咱们中国嘛,在东八区,但是这个时间不是东八区的时间,并且格式还不是当前格式,所以咱需要把它做个修改,要不然时间显示会显示成这个样子,不是咱们当前时去的时间,那怎么来改,我们来解决一下啊,在配置文件中加上这段话就可以了,然后把这段话复制一下,然后找到咱们的项目中,在项目里边的找到配置文件,就这个application-DV文件。
01:36
把这个打开,然后咱们在这位置加上这段配置,注意啊,加的时候不要加错啊,这个加的时候呢,呃,我这里重新加一下啊,看看这位置,它加的时候注意这个格式啊,它要跟我们这个里边的是同一级别的,我这么加就不太对了啊,咱给稍微改一下,加到层级跟是同一个级别,要不然里面会出错,而加完之后大家看啊,这里边一个date format日期格式,咱们是年月日小时分秒,然后这个加上时区,就是东八区,现在就可以了,可以之后我把服务器重新启动一下,然后咱们再做个测试,看一下这个日期时间显示是否正确。
02:27
等它启动啊,那我们来看一下。然后到里边,我再次点击发送。大家看啊,时间是不是正确了,年月日小时分秒,所以咱们现在把这个小的问题做了解决,然后解决之后我们继续往下看啊,咱们看这里边的就是第一章节中的最后一个内容,叫统一异常处理。那我解释一下这个什么意思啊。比如说我现在啊,我随便找一个接口,咱就找第一个接口查询所有,然后在里边呢,比如我现在我让他手动咱们模拟出一个异常的一个效果,咱手动自动模拟怎么模拟,我就直接让这个数字除以零,是不是有异常,这各位都明确啊,因为零不能做除数嘛,而咱一执行它就会出现异常,我现在把服务器启动,我们做个测试,看目前是什么样的。
03:24
因为目前这异常我们没有做任何处理,来看目前会出现什么样的效果。等它启动,然后我们到里边点击发送。大家看给咱们是反映这个信息啊,信息中一个状态码是不是叫500啊,这是我们默认的情况,而我现在呢,我想做这么一个效果,什么效果,你所有接口不管有没有异常都返回相同的格式,也就是说啊,就算我有异常返回,也是咱们规定的这个伪造那个格式,所以现在我们就来做这个处理,这个处理就叫做统一异常处理,也就是说就算有异常返回的也是相同的数据格式,那怎么来做,我们先做个说明,然后咱们进行具体演示。
04:14
我在图里边给大家画一下啊。首先咱们做的这个内容叫统一异常处理,而同异常处理我们有三个,或者说有三种实现的过程。第一个叫做。全局异常处理我先写,然后给大家解释,最后再演示。另外有第二个叫特定。异常处理,除此之外还有第三个叫自定义异常处理,这是里边的三种情况,那咱说一下什么意思啊,先说第一个全局。大家看这词,什么叫全局,也就是说啊,你不管什么异常,他都执行这个处理的这个结果。第二个叫特定,什么叫特定?比如我现在空指针,我执行这个处理,我数组下标越界执行另外一个处理,就针对特定异常做不同处理。还有第三个叫自定义,我觉得这些异常不能满足我的需求,我可以自己编写一个异常类,自己来抛出异常,这个叫自定义异常处理。以上就是三种情况。
05:25
那下面我们来演示一下啊,首先我们先演示第一个叫全局异常处理,那这个怎么做,给大家先写一下步骤,然后咱进行实现,因为这些过程应该都比较类似。我写到这里啊。首先我们的第一部分咱们创建一个类啊,这个类的名字可以随便起,大家看我课件中我叫global handle全局异常处理器,这是一部分,建个类,然后在这个类上边注意啊,类上边添加上一个注解,就表示把这个加到当前功能中来,然后这个注解我们看到叫controller advice,在当前里边加上这个功能。
06:11
这个加上之后,我们下一个操作,也就是第二步操作。写下啊,在这个类里边添加上一个执行的方法,比如说我全局,那就用这个方法,我特定就行,这个方法自定义执行,另外一个方法添加执行方法,在方法上边添加上一个注解。大家看这注解啊,这个handle就是异常处理器里边指定你什么异常执行,比如说我这么做是不是所有异常都执行,如果你写个控制针,或者写个什么数字下标越界,那针对特定异常进行处理。这是我们写到的啊,把这个补充完整,在方法上添加注解指定。哪个异常出现的时候会执行。
07:03
这是我们的第二部分,然后这样的话,这个就完成了,而它的底层呢,其实用到了一种思想A,也就是不改变源代码的情况下,在里边增加一个功能,咱目前是增加一个异常处理功能,比如说之前的代码不需要改,咱通过它把这功能加到里面去做一个异常处理。这是我们实验的过程,那下面的把这个给大家来具体写一下啊,来做个实现,因为它是所有这里边都用到的,所以咱们还是。我这位来写一下啊。我个我们这个。就写到这了啊,然后在ion里边创建一个类叫globalion,到这个类的名字随便,然后在类上边我们一个解解啊叫advice,通过A把这功能前这去,就把这个异常处理加到当前里边去。
08:18
然后加上之后在里边写一个议程出来之后执行的方法,咱们先做一个。选举异常处理这行的方法,那咱看怎么做啊,我这里写一下,我们加上一个public。Result,因为咱统一返回的都是它。然后加一个方法,这个名字随便啊,我就叫这个。这个方法,然后加上之后,在里边我们加上一个返回结果result点。现在这就完成了,然后在里边呢,咱为了更加明确,可以把这个内容给它补充一下,比如我加上一个。
09:02
Message啊,里面加个值,说执行了全局异常处理,为了咱看的更明确,现在方法完成。但是大家看啊,我这么完成之后,这方法肯定它不会执行,因为咱没有指定它是哪个异常是执行,所以咱需要在方法上边加上一个注解。我写下啊,看到指定是哪个异常,是行加个点,当你出现异常这方法会知晓,这是我们写的一个方法,而这里边还有一个问题。因为咱们最终要返回这份数据嘛,所以你还需要加一个注解,这个注解。Response body。为什么加你看啊,里边我们是不加了一个,里边有这个,但是现在它不是在里,所以咱手动加个注解的包,为了它能返回这的数据。以上就是全局异常处理,当你出现异常,这方法就会执行,最终返回这个结果。
10:11
这是我们加上的这么一个过程,被各位反正知道啊,而加的过程中咱也发现了我们之前代码好像没有做什么修改,而咱通过这个类最终完成了异常处理。这个打不掉角这里。然后写到这里之后,我把这服务器启动一下啊,咱们做个测试,试一下效果是怎么样的。等它启动啊,那我们来试一下。现在啊,服务已经启动了,然后咱们在这里边,比如现在还是这个里边我点发送。大家看是不是出来结果,你看结果里边啊,说执行了全局异常处理这句话是不是就是我刚才写的。这句话这就可以了,另外呢,如果你为了看的更明确,你可以在方法中啊加上一个参数,然后把这个异常的信息做输出,当然也可以不输出,看你的实际,我这里写的完整点,就把这个值也给它输出一下。
11:15
所以这个全局异常处理我们就完成了,各位知道这个使用的过程,创建类,类上面加注解,这个注解表示把这功能加到当前这里边来,然后第二个在类里边写上执行方法,方法上加注解,指定哪个异常时候会执行,然后最终可以做一些最终的同样的反结果,跟之前的是一样的结果。这个啊,我们就说到这里。
我来说两句