springboot的web场景开发------请求参数的处理

回顾springMVC的请求参数处理的注解

@ParthVariable

这个参数的作用就是我们如果想将请求参数中的数据传入到我们的方法中的参数中就需要这个注解
在这里插入图片描述
并且注意springMVC给我们提供了简单的包装,虽然我们获取到的都是String类型的参数,但是它可以进行简答的包装类型的转换,就像上图中的String–》Integer。

这里还有一个小细节就是,我们可以直接使用一个map来获取所有请求参数的一个map,key就是参数名,value就是请求参数的值

进行测试
在这里插入图片描述
点击第一个超链接
在这里插入图片描述
获取成功

@RequestHeader

这个注解的作用就是获取请求头的信息

有两种使用的方式

第一种:
@RequestHeader("User-Agent") String userAgent在映射方法的参数中直接写想要获取哪个请求头信息的值

第二种:
@RequestHeader Map<String,String> header直接获取所有的请求头的信息

举例示范
在这里插入图片描述
测试
在这里插入图片描述
获取成功
在这里插入图片描述

@RequestParam

该注解用于给我们的controller中方法的参数接收请求参数

有三种接收的方式

第一种:
要接收的请求参数只有一个值
@RequestParam("age") Integer age例如这样

第二种:
要接收的请求参数有很多值,我们可以使用list集合接收
例如@RequestParam("hobby") List<String> hobby

第三种:
我们可以使用一个map集合来接收所有的请求参数
@RequestParam Map<String,String> param

举例示范
请求的路径
在这里插入图片描述

在这里插入图片描述
测试
在这里插入图片描述
成功获取
在这里插入图片描述

@CookieValue

这个注解是用于获取cookie的值,用法和上面相同,这里不做演示

@RequestBody

获取请求体中的内容,注意只有当请求方式为post的时候才会有请求体,这个注解也很简单,不做演示了

@RequestAttribute

该注解用于页面转发后从request域中获取数据使用的

举例示范

我们来使用转发到success请求的方式来模拟
在这里插入图片描述
转发之后从request域中获取数据有两种方式

第一种就是使用@RequestAttribute注解来获取
另一种就是使用HttpServletRequest原生request来获取

测试
在这里插入图片描述

@MatrixVariable

这个注解是第一次遇到,那这个注解是做什么用的的呢?
我们在不知道这个 矩阵变量的时候,如果一个Rest风格的请求中有很多请求参数我们如何实现呢?
/cars/{path}?xxx=xxx&aaa=ccc我们会使用的方式就是这种查询字符串的方式

而我们如果使用矩阵变量的形式就是这样的
/cars/{path;low=34;brand=byd,aodi,yd使用;来进行分隔请求参数

关于矩阵变量涉及到一道典型的面试题

问:我们在做页面开发的时候,如果cookie被禁用了,那我们如何使用我们的session?

这个问题设计到了session的原理:
session代表每一个会话,我们在第第一次访问服务器的时候会建立一个session存放在服务器中,然后生成一个jsessionid,将这个jessionid设置为我们的cookie响应给浏览器,然后浏览器以后每一次访问都会携带这个jsessionid,再次访问的时候就可以在服务器根据携带的这个jsessionid来匹配对应的session。

那么也就是意味着当cookie被禁用的时候我们就无法找到我们对应的session了,我们该如何解决这样的问题呢?
我们可以使用一种叫做url重写的方式:/abc;jsessionid=xxx这个url重写就用到了矩阵变量。这就相当于吧cookie的值使用矩阵变量的方式传递回到了客户端浏览器,然后发送请求的时候也使用矩阵变量的形式发送请求。

那为什么不使用request来存放jsessionid呢?
这是因为我们如果使用请求参数的方式进行 传递,我们就没办法跟我们普通的请求参数进行区分了。

举例示范矩阵变量的使用

在这里插入图片描述

在这里插入图片描述
测试
点击超链接
在这里插入图片描述
发现报错
在这里插入图片描述
他说找不到low这个矩阵变量

这是因为springboot默认禁用了矩阵变量,我们需要手动开启

我们现来分析springboot底层代码是如何实现处理url请求的
在webMvcAutoConfiguration中有个覆盖重写了的方法
在这里插入图片描述
这个配置路径匹配方法中

这个方法中用到了UrlPathHelper这个类,这个类就是处理url的类
我们点进去看
在这里插入图片描述
我们看到这个类中有一个属性叫做移除分号内容,并且设置的是true
然后我们查看它的set方法
在这里插入图片描述
注释也解释了
在这里插入图片描述
大致意思就是;号后面的东西会移除,默认是true,所以我们请求之后springboot只收到了分号前的请求

总结:对于路径的处理都是经过UrlPathHelper进行解析的。通过设置removeSemicolonContent属性来决定是否支持矩阵变量

我们有两种配置方法
第一种是直接在配置类中配置一个WebMvcConfigurer组件
在这里插入图片描述

然后我们再次测试,此时映射路径的写法应该变为
在这里插入图片描述
测试访问
在这里插入图片描述
真正的访问路径是sell,并且获取到了矩阵变量的值

另一种方法是实现WebMvcConfigurer组件
在这里插入图片描述
这种实现webMvcConfigurer接口的方式可以在不改变其他springboot默认组件的情况下设置自己的配置,而上面的那一种配置方式是完全自定义了WebMvcConfigurer组件。

posted @ 2021-03-13 12:32  谢海川  阅读(107)  评论(0)    收藏  举报