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组件。

浙公网安备 33010602011771号