00:00
好,那接下来我们说一下spring m VC在底层处理web请求可以接受的传参类型,老师呢大概分为了四类,第一类我们使用注解方式,比如我们要获取请求参数的时候,那为了方便,我们就可以在我们参数的位置随便上写上一个参数,然后呢,我们可以使用request p来标注,比如我来写一个username,那就意思呢,我们从请求参数的位置拿到username并复制给name,不方便到后边使用,当然还有很多注解,我们一会测试。还有呢,第二种类型,我们可以传入一些sol API,比如我们在下边呢,测试期间我们需要给session里边放一些数据,我们可以传入HTTPC,然后呢,那我们在下边就可以操作C式,我们呢还可以传入一些复杂参数,比如map model等等,特别是model,比如我们想要给页面放一些数据在页面进行显示,那么就可以把数据放在model里边,那model里边的数据呢,最终会被放到request这个。
01:00
这个请求域中,然后我们就可以在我们的这个页面拿到我们这个请求域中的数据,然后呢,第四种类型就是我们自定义类型的这个参数对象,比如我们在这儿传了一个person,这样呢,我们所有的提交过来的这个请求参数,或者是我们请求题里边的这些KV,它呢全部会被封装到我们person对象里边来,方方便我们后来使用,那我们就来测试一下我们这四种传参的这个使用,回顾一下整个的这个使用方法,好,我们来到这个我们的首页,我们先来测试挨个的基本注解,首先是路径变量,我专门来写一个controller来测试这些功能,我就叫prime test,那么参数的这个测试的controller。按rest ctrl。好,我们来写上第一个方法,呃,这个方法呢,比如我们就返回一个map,这个map呢,直接写给页面就行了,然后这个map我们就是string object map里边放什么都行,然后呢,我们这个方法我们来测第一个叫pass rob路径变量,那路径变量呢,一般用在我们这个rest请求,比如我们想要获取一个汽车信息,那汽车信息呢,我们推荐的这个做法就是我们使用risk风格,比如我写一个get mapping,然后呢,我写一个car,这就是获取汽车信息,但我想要获取ID,唯一的car,我们可以这样发请求啊,这是只是发请求,而不是映射,我们在浏览器上发问号,ID等于一,相当于把ID带到请求参数上,当然呢,这样不方便,我们rest风格呢,推荐是这么来写,我们在这写一个路径变量,然后呢,将来我们浏览器给我们发送car杠一,那就是获取一号汽车,杠二就是获取二号汽车,那么就可以来这么来写,比如的I。
02:50
D,那这个ID从哪来呢?它是获取到路径变量的值,按照路路径上的变量自动变化,我写一个pass variable,我写一个ID,那这样呢,我们就能得到ID的值,我呢直接准备一个map,我们将所有的这个数据返回出去,我们来最终看对不对,Map等于new一个哈希map。
03:10
好,Map里边我们来放的第一个put,咱们这个使用pass variable得到的ID的值我们放进去,然后呢,这是我们的这个map,当然我们这个passver有可能很多,比如我们这个二号汽车,它的这个所有者信息,Owner,然后呢,这个所有者,比如这个汽车呢,有呃,四五个人同时拥有它,那我想要获取三号人的这个信息,或者我们想要获取张三这个拥有者的信息,所以呢,我们整个的路径变量可能很长,Owner这一块呢,都是固定的,然后呢,有两处变的,一处是ID,一处是我们这个人的用户名,所以呢,我们不只能获取到这个ID,我们也能获取到这个用户名,比如我们就叫name吧,然后呢,这个name呢,它是取决来源于路径变量的,所以我写一个pass variable pass variable呢?我可以拿到路径变量里边的值,包括我们来点进pass variable这个注解,甚至于我们在这一块呢,它是这么来说,如果我们参数的。
04:11
配值这个参数呢是一个map,它会将所有的这个路径变量都的这个KV都放进map里边,所以呢,那我就可以这么来写,我专门来准备一个map,来看一下pass ver,而且这个呢要求是string string类型不能乱写,那我们就来string string,然后呢,我们就叫map,然后呢,我们来给它标注一个注解,叫pass variable,也就说pass variable标注我们除了在这,好,我们就叫PV吧,我们除了呢在这直接是明确的告诉他我要获取路径变量中谁的值Y能单独提取出来,我们也可以把所有的路径变量把它的KV都提取出来,好,我们来把他们的封装到这个map里边put,我们把单独提取的还有一个name的值是不是等于我们封装的username。
05:05
我们可以来确认一下走,然后name值,然后呢,包括我们现在拿到的所有pass variable,我们把这个PV打印一下,我们所有的这个pass variable的值来放到这,然后我把这个map返回,我们先来看我pass variable能不能使用,这就是我们的路径变量,我们直接路径上的这个位置可以被动态替换。好,我来测试,我们来主要呢访问这个car这个请求,我直接在页面上呢,我们就来访问一下就行了。把这个链接放到这A,这是我们这个路径变量超链接h ref,好,我们把这个car,比如呢,我要获取三号的这个汽车,呃,是李四,李四这个人的信息,然后呢,我来CTRLF9,因为我们已经引入了DV兔子,所以我们这个页面CTRLF9刷新就行了,好,我们来获取一下,哎,我们发现呢,我们这一块信息都是对的,我们单独的这个ID3 id3包括呢name,李四能获取来,包括我们整个PV,把ID3USERNAME也封装过来了,没问题,这是我们pass variable。
06:17
那我们再来测试一个,我们叫request head,每一次发请求呢,我们会发现我们这个请求呢,都会带非常多的请求头,那为了方便获取期间我们这个请求图啊,在未来可能经常有用,比如我在这请求头里边,我想要获取我们这个请求是来源于哪发的,我们想要获取这个地址,包括呢,我们要获取这个user agent,它整个浏览器信息,那怎么办呢?我就可以这么来做,我们呢给这个controller里边,我们再来专门来写上一个我要获取一个请求头,比如user agent的这个请求头,它这个用户代理,那请求头的获取呢,我可以使用an,我们就叫request header,我们来获取请求头,这个请求头呢,我们专门来调,哎,我们发请求呢,有这么多请求头,我想要获取user agent。
07:07
就把它拿过来,CTRLC复制过来走,这是呢,获取一个请求头,假设呢,我们把这个请求头,我们这个注解点点进来,我们看人家说呢,这个请求头啊,你还可以传递成一个参数map或者multi one6map或者叫htp headers能帮你拿到所有的请求头,那我就专门传一个map,而且呢,KV必须是string string相当于这三种类型,也允许用这个request来进行标注,那我呢,再来一个map。我们再来一个map,这个map里边呢,都是所有的请求头headers,我想把所有的我们当次发请求的所有请求头拿来,那我就可以来标注request head,那request head带K了,那就是只拿某一个,不带了,就是拿所有,我们再来验证一下map,点一个put,我们将我们带的这个user agent信息。
08:06
我们放进去。User agent,然后呢,包括我们这个整个全量的请求头信息来放进去put,比如我们这个headers,好,我们在这儿呢,来写一个。好,我们来做一个测试CTRLF9啊,我们这个类呢发生变化,CTRLF9它会自动重新启动啊,稍等一下。好,我们看到呢,重新启动,我再来访问一下。我来刷新,哎,我们看到呢,整个信息是没问题的,包括我们response这个响应里边,哎,Headers这个里边呢,就是我们所有的请求头,那看这一块呢,稍微有点难看啊,我们让他解析,Heads里边是我们所有请求头,单个user agent我们也能提取出来,这是我们获取请求头,那同理,我们再来测试一下其他的注解,然后呢,我们还可以用request per获取请求参数,我们发请求的时候呢,比如我来带上参数,比如这个参数呢,第一个age我们就随便带H等于18,年龄等于18,还有一个呢,And参数呢,要带and and它的这个什么呢?Name,呃,我们不叫name了,And这个兴趣interests,好,他感感兴趣哪些呢?比如有篮球,对吧,我们来写一个basket啊,有篮球,比如呢,我们还有足球等等,那我们这个兴趣呢,可能有很多,所以呢,我们一般有一个属性有。
09:39
多个值,那我们就可以这么来写,比如比如我们这个游戏game哈,我现在呢,写了咱们这么一个链接,我想要获取这个H和interest的这个值,那怎么办呢?我们就可以在这。首先edge呢是一个配,我就可以拿到单个edge的值,按request per,请求参数中我来获取edge,包括呢,请求参数中我们也可以获取interest,但是呢,我们感兴趣的东西它是一个集合,所以呢,我们就可以直接来写集合类型的我们这个interests,它感兴趣的东西,把list呢来导进来,同样的at request。
10:22
Request per request per呢,我们在这来获取我们所有的请求参数,请求参数里边有一个这个interest,好,Interest我们把这个拿过来,包括request power,我们点进来看request power也说你也可以来写一个map,现在它帮你把所有请求参数的值封装到这个map里边,所以呢,当我想批量把我们当前请求所有的这个请求参数的值都拿过来的时候,我继续来一个map string string,就这就是我们所有的pars,哎,这个PAR呢,我们就可以不不来说我们取某一个值了,我取的是所有,哎,我们把这个map呢重新放进去,那其他的这几个就不放了,要不然打印一大堆的东西。map.put put首先我们第一个H的值我们能得到没问题,然后呢,Map点一个put,我们的这个interests单独的值我们也能得到。
11:23
好,没问题,包括呢,我们拿回到所有的请求参数,我们我们也能得到的,这个也能得到,来做一个测试,CTRLF9。好,我们来看一下我们最终的这个效果,我在这儿测试,呃,我们来测试呢,我们来把这个请求发出来,呃,这个请求好,我直接来刷新一下这个链接,我们重新来发,来到首页来刷新一下我们的这个测试链接,点过来,好,我们会看到我们带的这个edge单独能提取出来,包括呢,Interests,因为它是一个数组,我们有多个值,这个呢,如果是页面,那其实它就是一个多选框,我们选同一个属性,选中了两个值,然后呢,所有的我们也封装成了map打印,没有任何问题,这是我们说的这个参数叫request p,另外我们也可以获取cookie的值,使用cookie value6各试一下,因为我们大家来看,我们现在发请求呢,其实应该也带cookie了,哎,我们这个request header里边我们带了cookie,只不过这个cookie呢,是我们这个idea来测试应用的时候默认带的这些cookie,如果我们想要获取某一个cookie的值,比如我们就要获取这个杠GA这个。
12:41
值,那我们也可以来获取到,比如我们来到它里边,我要获取单独某一个cookie的值,我们就来写一个我们的这个杠GA的这个值,那这个值我怎么获取呢?我们只需要一个注解叫cookie y6,那cookie y6呢,我们就能拿到杠GA的这个值,然后呢,接下来我们再来看。
13:02
我们把这个杠七的这个值来打印一下吧,Map点一个put,而且呢,这个值因为我们带了这个短横线,比较特殊,我们看它能不能获取过来。来启动起来走,包括呢cookie value我们来点进来,我们看cookie value这个,他说我们这个cookie value啊,我们也可以声明成一个cookie类型,这样呢,他会把我们指定的这个cookie的这个所有信息全拿回来,我们先来看。我来刷新,我们看能不能拿到我们这个杠7A的值,杠7A好没问题,然后呢,如果我们现在杠7A,我只是拿到了杠7A的值,我想把杠7A的整个cookie信息全部拿出来,那我就可以写一个参数类型叫cookie,也就是说我写一个这个cookie的参数类型,大家注意看,我们呢可以声明一个cookie的参数类型,然后呢,我们再来说cookie value6啊,我们让它把我们这个拿过来enter一个cookie value,然后呢,你给我把这个cookie给我全部拿过来杠,比如杠7A这个cookie拿过来,我们可以把这个cookie呢整个来打印一下。
14:09
This out cookie。CTRLF9来做一个测试。好,我们来刷新,好,现在呢,我们这一块呢,我们来看控制台的打印,诶我们整个cookie对象就拿过来了,而且这个cookie对象里边它真正的内容我们可以get name,这个cookie的名字是什么,Cookie的值是什么,我都能拿得到cookie点一个get value ctrl f9。这是我们获取cookie值啊,每一个注解该怎么用,我们点进去参照人家文档的这个描述就行了,包括呢,我们这一块文档上面还会告诉我们还能兼容哪种写法啊,这个也非常方便来测试一下。刷新好,我们再来控制台看一下能不能打印出我们cookie的名字是杠几A,只是这个没问题,那这样呢也会非常方便,如果我们想把这个cookie再发回去,我们可以使用response把它再发回去,这是我们这个cookie value6,然后呢,另外我们再来测试一个叫request body获取请求体的值,还有这个request attribute,我一会来测request a body是什么呢?那就是什么叫获取请求体,请求体请求体,也就是说只有我们post请求才有请求体,如果浏览器给我们发了post请求,比如表单提交,表单提交里边有非常多的KV,我可以把它整个表单里边的数据全部拿来,那我们就可以来写一个,因为表单里边的数据呢。
15:41
我全部拿来,为了方便起见,我直接写一个string,就叫content,然后呢,我们这个内容呢,是来源于request body,哎,Request body,那我们这个因为是表单提交,所以我们重新来一个方法,重新来一个方法public。
16:00
我们这个方法呢,它是get慢,我们重新来一个方法,呃,我们呢,还是返返回慢。返回咱们这个map,比如我们这个post man,诶,我们来测试的是表单提交的post方式,按post map mapping好,Post mapping。这个删掉。我们这个postman,我们来看页面,页面呢我也准备了一个表单,你发杠save请求,会给你提交username和一面这两个值,所以呢,Post map,它处理的请求是杠save,然后呢,我们把这两个值全部拿来,String,这是表单的内容,Content来使用一个注解叫request body request body相当于把请求体的数据拿过来,来最终return一下。把我们的这个也拿过来。Map,好,那么这个map里边点一个put,我们的表单的内容content,我们看使用request body能不能拿到,走CTRLF9。
17:12
来测试一下。来到我们的这个首页,我们来测试表单提交,表单提交,表单提交呢,在这儿用户名我写一个张三,然后呢,邮箱我写一个AAA,我点一个提交,然后呢,我们发现,诶,我们整个表单的内容就叫username,张三and email等于AA,用我们这个表单提交啊,我们来看提交的时候,Request请求有一个form data,想我们表单的内容,表单的内容呢,原本就是这个username张三and email等于什么,所以呢,我们能获取到原本表单的内容信息,这是我们说的request body,好,这是我们说的这几个比较简单的也常见的几个注解,那剩下的这两个request attribute和matrix,我们的variable,我们下一个来进行测试。
我来说两句