00:01
各位同学大家好,欢迎继续收看上硅谷视频课程。我们继续来开发上硅谷、上伊通项目。之前内容中呢,我们完成了医院设置进口开发,完成了它的增删改查的监控接口,那咱们下面继续往下学习,下面给各位来讲这么一个内容,叫做选举异常处理,以及日志的这么一个处理,那首先我们先来学习选举异常处理。我先解释一下什么叫全局异常处理,大家注意,比如说我们现在当我们程序运行过程中,如果出现了异常,大家说会有什么效果?我们之前应该演示过,在我们页面中是不是会返回一个模板的错误,而这种返回虽然说它有错误提示,在这种提示是不是很不友好,所以我们现在可以做个处理,当你程序云过程中出现异常,然后它就反一个统一的提示,而不是出现500的这么一个错误,所以这个就叫选举异常处理,当有异常出现一个统一的提示,而不是直接返回500。
01:12
那这里边给各位先简单演一个效果,比如我现在我就来到CTRL里边,在CTRL中呢,咱们手动来模拟个异常,我们来看一下目前的一个基本的效果是什么样的。比如说我们模拟一下,假如现在我就以这个为例,我在这个方法中呢,比如咱们现在先手动来模拟一个异常。那怎么模拟,咱就做一个最简单操作,假如现在我写一个就是除以零,除以零是不是肯定会有异常,那我现在把服务启动,当我再来访问这个接口,它是不是就会出现异常,而在目前没有做任何配置,在目前情况下,当你访问是不是应该会出现一个500错误,所以我们先看目前效果,然后咱们再有全局异常处理,对它做一个解决。
02:04
那现在服务器启动了,然后咱们打开我这个swa。在Spark中呢,找到刚才我们用这个方法,这个方法,然后在里边我随便写上一个ID值,咱们点try it out,大家看目前是不是出现了一个500的一个错误提示,这个提示虽然说有错误信息,但这个提示是不是很不友好,所以咱们可以让他做一个统一的一个计算返回。这就叫全局异常处理,这给各位做了一个需求的说明,那这个怎么做,给各位来演示一下啊,因为咱们的全异常处理,我们在项目中的其他模块中是不是也需要用到,所以我这里边就把这个异常处理写到咱们common中,为了我们所有模块中都能使用到,那我来做一下,首先比如我在这个common u里边,咱们首先先创建一个包。
03:00
这个包里边就写咱们那个异常的处理,那我来借个包。我们是com.at硅谷,点上预约挂号,点上comment。然后点上一个叫exception。是异常处理,然后写完之后,我在一个section里边呢,怎么做呢,给各位强调,它的做法很简单,咱们写个类,在类上面加个注解叫controller advice,然后里边指定就是你是什么异常执行,我们指定异常类型,包括你输出的这么一个结果,那我下面给各位写一下。首先我在包里边呢,先创建一个类,这个类比如我起名叫global handler,然后创建之后呢,在类上边咱们加上一个注解。刚才我们看到这个不解,就叫做controller advice。然后加上之后在里边呢,写上咱的方法,这个方法我们就来一个public,因为咱们要统一结构返回,所以就来一个result,咱们之前用过,然后在里边我给方法起个名字,假如说我叫这个I。
04:16
这是我们写的方法,然后在方法里边呢,加上你是什么异常执行,比如咱们现在就写个exception,让他所有异常都去执行这个方法exception,然后写完之后在我们这个方法上边,咱们先加上第一个主体,这个主体就表示设置你什么异常执行,然后里边用到一个注解,我写一下叫exception。Handler里边加上你那个一旁的类型的class。所以大家注意这句话它的含义就是如果说我现在程序执行出现异常,那这个方法就会执行,因为exception是一个总的这么一个异常,然后写完之后,在这方法中咱们可以把异常,比如说我做一个输出,包括里边咱们反一个统一的一个结果,就是造的点的这个five这样的话就可以了。
05:14
然后写完之后呢,各位注意啊,因为现在呢,我这是一个普通类,咱们不是一个CR了,在CTRL里边呢,咱们有这个主题叫瑞controller,瑞control中是不是有一个response body可以输出,但是我现在虽然说能返回它不会输出,所以咱们需要在这里边再给它加上一个注解,我加到方法上,这个注解就叫做response包点,让他可以把结果用JA形式做输出。所以咱们这么写之后,这个选举异常处理就完成了。就是写个类里面加注解,然后指定你是什么异常,就用这个方法,咱们指定的是exception,当它出现exception,那这个方法就会执行,然后里边结果就会做输出,这样的话咱把它就完成了,然后完成之后我们下面把这效果咱们执行一下,看一下这效果能不能实现出来。
06:14
也就是说我还是访问们,刚才我手动模拟那个异常方法,刚才是出现一个500错误,但是现在如果效果正确,会把咱们刚才那个返回值给咱们做输出,就是返回这个值。这叫统一异常处理。然后现在我把服务器启动,咱们来做一个最终的测试,看一下最终的效果是什么样的。我们等它启动。好,现在已经启动了,然后咱们还是来到我们这个。Swa测试接口部分在里边,我随便写一个ID值,然后咱们点try it out,大家看结果返回的是不是就是咱们的统一的结果是这个201失败。
07:02
OK,是,所以这样的话,把这个我们就做到了,就是选举异常处理。各位把这过程就知道。然后这个做到之后,大家注意啊,就是我刚才的这个异常是不是由这个系统自动抛出来异常,但是实际中呢,有些异常可能它系统中自带的并不能满足咱的需求,所以咱们也可以自己手动定义异常,也就是说定一个自定异常,就是我们自己写异常名字,然后把它进行抛出,那下面给各位就来写这个自定义异常。那我们说一下怎么做啊,首先呢定异常,你在里边呢,需要先写一个自定义异常的类,这个类呢,我提前写好了,给各位拿过来,然后咱看一下这个类也不复杂,咱看一下我这里是怎么写的。把这个拿回来,然后咱们看我这个类啊,我这类的名字叫预约挂号exception,然后咱们看他干了什么事情,是不是继承了run type exception里边有你的状态面,有你的信息,然后最终有它的就是相应的方法,包括这里边加了data,生成了这个的get和set方法,所以这是我们写这个自定义异常类,然后写完之后咱们需要在这个里边也是按照这种规则做一个定义。
08:26
那这里边给大家定一下,首先定义过程中大家注意啊,我们的这个位置就不写exception了,要写谁。是不是这个预约挂号exception,预约挂号exception,而这么做之后,当你出现这个异常,它就会执行我们的这个方法,这是我们提到的这么一个特点,就是自定义异常。所以咱们把它完成了,而经异常呢,还有一个特点,因为这个异常呢,并不是由系统抛出的,需要咱们手动给它抛出去,最后在里边咱们需要对它做一个处理。
09:03
我就写一个,快开。然后里边加上一个exception。在这里边呢,咱在踹里边,把这个异常代码放进去,当它有异常开能捕获到,捕获到之后咱需要手动给他子肉妞,这个叫预约挂号。Exception手动抛出在里边可以指定就是它那个状态上面,包括它的一些基本信息,在这个是我们提到的一点,就是你需要手动抛出这个异常,因为它不会自动调用,它是我们这里边。也就是不是系统抛出来的这么一个异常。我们给它写完,因为这里边的预约挂号有三分,里边需要咱们传两参数,第一个是它那个信息,第二个是一个状态码。比如说他的信息我们就叫这个失败,然后状态码我们就是201。
10:05
所以这样的话呢,咱们把这个就完成了,注意它需要手动抛出这个异常,这是关于自定义异常的一个说明,然后这个说完之后,咱们下面把这效果我们来做个测试,就看一下咱们写的定义异常到底能不能定出来。那我们来给它做一个测试啊,但是这里边咱们也是把这项目,我们先给它重新刷新一下,因为咱们加了新的内容,然后刷新之后我把服务器再启动,咱们再做这个测试。因为咱们刚才加了一个新的一个类,那现在刷新之后,我把项目咱们再做一个启动,然后最终我们来测试一下。我们先等它启动起来。各位看项目已经启动了,然后咱们还是访问,刚才我这个类,就是这个模拟异常的这个类,我们找到在里边还这个。
11:05
我在这位置呢,随便写上一个ID值,然后咱们点这个try it out,大家看结果是不是输错了,201失败就是咱们刚才写那个相关内容,比如这个位置,他把这个异常直接就我们就是输出了,所以这样的话呢,我们就完成了这个统一异常处理,包括里边这个咱再看一遍,第一个全局异常处理,所有异常都执行,第二个叫自定义异常处理,咱需要自己写一个定异常,里边指令你的状态码和你的信息,然后最终用的时候需要把定异常手动给它抛出去。这样的话,咱们把这个功能就完成了,关于这个选举异常处理的这么一个实现。
我来说两句