00:00
好,那接下来呢,我们来看一下。呃,我们来说一下就是异常,从这个它发生的时间点来分类的话呢,我们分为它发生在controller之前,还有进入到controller之后。什么叫发生在controller之前呢?就是我们前端呀,要向后端发一个请求,然后呢,还没有真正的执行到controller方法的内部,以及还没有调用service,甚至是还没有调用map的时候呢,之前就出现了问题,那这些问题基本上都是什么样的问题呢?比如说我这面呢,是post形式的接口,然后你这面呢,用get调用,或者是我这面呢,要接收一个参数,是response body类型的,然后这面呢,啊,就是request body类型的,然后这面呢,你并没有给我一个合法的参数,或者是类似于参数的这个数据类型不匹配啊等等啊,数据转换格式转换不过来呀,啊都是在这个进真正进入到controller之前呢,发生的这样的一个异常,那如果你想把进入到ler之前的一些异常呢,和我们的一些业务当中的一个具体的业务处理的异常给它分开的话呢,我们可以单独把所有的controller相关的异常呢,都给它提出来,比如说我们用这种方式。
01:16
这些呢,就是所有在进入controller之前可能发生的异常啊,我先把这个给它粘过去,因为这特别多,咱们就不一个一个写了。放到unified exception。好,然后把这个包再给他引一下啊,引这个spring里面的,好,然后这里面举几个例子吧,比如说。啊,比如说我我我传一个参数,但是参数不合法。比如说我我你你要一个Jason,然后我的给你的不是Jason格式啊,接口要一个Jason形式,我接口给你的不是Jason形式,那么它就会报htp message not read except啊,然后呢,比如说我呢,这个需要一个pass variable啊这样的一个路径,然后我呢确实也定义了一个pass路径,但是呢,你在接口定义的时候呢,你没有写pass variable接口这个注解,那么可能呢,就会报告这个异常叫ma pass variable exception啊,然后再有呢,就是htp media type not supported exception,就是媒体类型,媒体类型的话,比如说我我呢应该是上传文件,然后你们没有这个上传文件的具体的这样的一个媒体给我,给我拿过来,那他可能就会报告这样的一个P,还有这个request method,就像我刚才说的,你接口那边写的是post形式的接口,然后我这边调用的时候呢,用的是get形式的调用啊这块呢也会包。
02:46
啊,相应的错误啊,所以这些其实都是真正在执行controller方法开始之前就报告的错误,那我们把所有的这些呢,都给它归类,归类到这个except里面啊,其实就相当于咱们这种跟这种差不多,只不过这种就处理一个是不是,然后我们这种呢,就是统一处理一大堆啊,然后让所有的这一大堆呢,咱们都有一个特殊的一个处理方案,好,然后这面呢,我们写一个叫做handle the light exception,然后呢,这个地方注意你要写exception,因为你这个地方参数的定义你没办法把这些全写上,所以这块就写负类就行了,然后这个里面处理的时候,具体你就处理具体的那个子类对象就可以了啊,你想处理谁,你把它写在这好,然后这块呢,我们也是一样,打印错误跟踪站,然后呢,抛出异常信息,好抛出异常信息的时候呢,我们直接就抛什么呢,就是这个给前端的这个异常,我们就固定就叫S,因为我们就把这个统一的嘛,所有的跟light相关的S请求的过程当中发生异常,我们。
03:46
都能用这个错误信息给前端反馈啊,这个细节前端其实不需要知道到底是为啥,前端就大概知道差不多的就行了,因为前端知道太多也没有什么意义,对不对,主要就是我们后端在打印日志的时候,要知道到底发生什么什么问题了啊,好,然后所以呢,这个日志一定要打印清楚啊,这样的话在控制台我们后端好调错对吧。
04:08
所以呢,这块就是我们针对于light啊的一个异常的一个统一的处理,然后接下来呢,我们就在这个地方呢,还是给它重新启动一下。好,项目已经启动成功了,接下来呢,我们在这个做保存的时候吧,还是这个保存方法啊,这这方法假设说人家后端呢,是需要一个真son数据的,但是你并没有给他一个这数据,你这个真son数据貌似就不太合法,是不是不太合法。嗯,他还非得这样写,还行,那就这样吧,这数这次数据不怎么合法,不怎么合法的话呢,那我就按Q一下,大家看这个地方呢。借款啊,稍等啊。
05:01
你刷新一下啊。帅。嗯,这样写好,然后接下来呢,我我X一下,然后大家看这款是不是就是serve light请求异常了,咱们刚刚自己封装的那个枚举对吧?嗯,就是这个嘛,S light arrowlight arrow是什么?是不是light请求异常啊,好,这样的话他就走了,咱们自己封装的这个,呃,Ctrller上一层相关的异常就独立出来,当然了,这只是一个例子,如果大家想把某一些异常批量的进行处理的话,那么你呢,就可以按照这样的一个思想啊,去做一个批量的一个异常的货,然后在这个地方呢,做一个统一的处理,好吧,所以这块呢,是我们的。啊,最后一个啊,叫做处理controller的上层异常好。
我来说两句