00:00
啊来接下来呢,我们就来具体来看一下,这个过滤器叫做hi的http method的filter啊,它是一个过滤器,那么我们主要呢,去分析它的这个源代码啊,那这个地方呢,我们看不清楚,我们直接来到我们的开发工具中,我们来找到它啊,打开我们的open ta找到拍on http method就是他。好,呃,进来以后呢,我们先来确保一下,它确实是我们之前学过的过滤器啊,呃,首先呢,它进成了一个叫做什么诶vans什么什么request f是吧?然后呢,你再往上翻啊,JA felt b,再往上翻,你就能看到它实现了一个felt接口,看到没有,那么我们来回想一下,我们当初在web里面去讲的这个filter,是不是就去实现了这个接口,对吧?所以说呢,诶在这个spring mvc里面呢,它是帮我们又做了一些什么其他的实现了,你看在这个接口下面呢,提供出了像这个filter b,提供出了像我们这个request什么什么fair,对吧,就像这个东西提供了这个东西,最终的话呢,才是我们具体使用的一个过滤器,好,所以说你不用去管它到底是怎么封装的,但是呢,我们要明白的就是,它顶层绝对是一个filter。
01:14
理解了吧,OK,好,那么对于这个filter来讲,我们主要看谁呢?我们主要是看了这个方法叫做do filter,这就是我们过滤器具体的一个处理过程,来接下来我要给大家去分析了啊,首先它会通过request去获取一个请求参数,这个方法都用过吧,Getter好,通过这个值呢,来去获取到一个请求参数,那么首先我们来看这个值它是谁?来点一下发现它就是一个常量啊,这个常量你再点一下发现就是一个字符串。看到了没有,下划线method,记住了啊,下划线method,那么也就意味着在这个位置呢,它会通过一个下划线method来去尝试着从你的请求中获取一个请求参数,叫做什么para value,这个呢?听明白了吧?OK,那么拿到这个para value以后呢,我们再来看他判断一下request get method这个方法就是获取你的请求方式的一个方法,我要看一下你当前这个请求是什么请求方式,那我通过request get method来获取,我获取到以后呢,我看看当前的请求方式是不是post。
02:32
理解吧,哎,也就意味着这是一个条件了啊,就是你是不是post,并且呢,你获取到的这个值有没有,你看has length,就判断一下你的长度什么的,看看你到底有没有这个值,明白了吧,如果说这两个条件都满足,那么其实它就满足了我们请求转换的一个条件了,接下来大家注意这一段代码,他先把我们的这个值呢,诶,转了个大,你看到没有,对吧,给你转成了大写,叫做什么method,说白了method就是para value的一个大写形式啊,再然后呢,它调用了一个叫做http method requestper,这是一个包装类啊,就是包装模式,听懂了吧,包装模式啊,他把我们的请求。
03:22
对象,以及我们当前的method是不是它呀,对不对,诶把当前的这个method说白了就是你通过下划线method获取到那个值,给它传到了我们这个外这个类中,好,那我们就来看在这个类中它做了什么事,你一点发现这就是一个内部类,看到没有,是不是还在我当前这个泪中啊,是吧,你看我从这点过去了一点,不就来到这了吗?看到了吗?哎,这就是一个内部类啊,好,在内部类中做了什么事呢?注意通过这个构造器把我们的请求对象以及我们的method传进来,传进来以后呢,他做了这样的事,你看好了哈,它定义了一个string类型的method,是一个成员变量,把我们传进来,这个method呢?诶,给到了这个method上面。
04:10
看明白了吗?然后重写了一个get method的方法,你看到没有overright是不是重写啊,重写的谁的呢?重写的他的,而他其实就是我们的,诶request对象的那个什么啊,负类型啊,你可以自己去看去啊,这个我就不在,还可以给你往里面去点了啊啊说白了就是我把你。Get method这个方法呢,做了个重写,然后呢,我把我当前的这个method的值呢给它回去了,那么我们要联系起来的是谁呢?它这个地方return的method呢,是不是就是我们这个地方获取到的这个值啊,能联系起来吗?现在。能不能,可以吧,你看这没什么难度嘛,把它转了个大写,变成method,把method传进来,传到这个位置又付给他了吗?那我一它不就是了,相当于这个值吗?
05:04
是不是OK,好,但是大家要注意了哈,这个东西用出来以后,你看它是继承了这个request viper的,说白了它其实也是一个request类型的一个对象,好,那么我们能看到的是,当他把这个扭出来以后,然后呢,再往后你看do filter大家还记不记得。Filter还记得吧,过滤器链对象去执行后续的处理的时候,并没有把原先的request传过去,而是把我们的va给他传过去了,你看到没有?看到没有,诶,把viper传过去了,那么我们就来想把viper传过去,这是一个filter filter,再往后走就是我们的dispa,那么在dispa solid里面所用的那个request对象是不是就是我们这个vaper了?对不对啊OK,而这个viper他将来去点get method获取请求方式的时候,那么viper去点方法是不是点出来就是这个方法呀,相当于是不是把我们获取到的那个参数值拿到了呀。
06:16
能看懂吗?所以说啊,我们把这个流程分析明白以后呢,其实大家应该能猜出来的就是这个值,其实就是我们想转换的那个请求。比如说我想把一个的请求,诶转成一个put的请求,那么你只需要保证我客户端发送的是一个post请求,满足这个条件,并且我要保证的是我获取到的这个值呢,诶就是这个值是有的,并且它这个值呢,就叫做什么po put,那么将来你看一下我这个PUT1直传,先转大写,再传到这儿,再传到这儿,然后呢,再给到它上面,将来你来看一下把这个viper传到我们的这个PA solid里面,以后在我们的PA solid里面,我通过viper,说白了就是我们的request,他去get麦的时候,是不是get到我们下面的这个方法,那么是不是把我们的put给拿过去了,那么也就成功的相当于把我们的一个post的请求是不是就转换成一个put请求了。
07:20
对不对,那么你在这个dispa里面,你获取到的是put请求,那么你再往后走,走到我们这个handler里面以后,是不是也是一个put请求了。明白了吗?所以说呢,诶首先把这一段代码呢,给大家分析明白,然后呢,接下来我们就知道怎么去操作。OK,这个源代码现在能读懂了吗?可以了吧,好,那么我就先给大家说这么多啊,下去以后呢,大家自己把这个源代码呢,再来分析分析,就按照我刚才分析的这个过程啊,你一点一点的给他们联系起来,然后呢,知道最后我获取到的就是我们这个方法中给他设置的这个method。
08:01
这就可以了。听懂了吧,好,OK,那么把这个过滤器分析明白以后,那么接下来我们就可以具体去使用我们的rest来去模拟一个CD的一个操作。明白了吧,OK。
我来说两句