SpringBoot 如何接收恳求矩阵变量的值?
引出
在页面开发中,如果cookie被禁用了, session 中的内容怎样运用?
问题
session 需求依据jsessionid 来找到具体是哪一个session 而jsessionid 要带着在cookie 中,如果cookie被禁用,服务器就不知道要找哪一个session了
处理办法
URL重写: /abc;jessionid=xxxxx 把Cookie 的值运用矩阵变量的方式进行传递
什么是矩阵变量
- URL:/cars/sell;low=34;brand=byd,audi,yd
- URL:/cars/sell;low=34;brand=byd;brand=audi,brand=yd
- URL:/cars/1;age=20/2;age=10
矩阵变量是跟在恳求里面的, 第一个是恳求sell 带着的参数为low,brand,第三个恳求是cars/1 参数age=20 和 cars/2 age=20
编写测验的类
@RestController
public class MatrixVariableController {
@GetMapping("/car/sell")
public Map test(@MatrixVariable ("low")Integer low,@MatrixVariable("brand") List<String> brand){
Map map=new HashMap();
map.put("low",low);
map.put("brand",brand);
return map;
}
}
拜访URL http://localhost:8080/car/sell;low=34;brand=byd,cdi,yd
原因分析
SpringBoot 默许禁用掉了 矩阵变量的用法 需求我们手动开启
代码分析
现在我们需求手动配置 将这个值设为false
运用@WebMvcConfigurer +@Configuration 自定义规矩
第一种写法 在Myconfig类中 注册Bean
@Configuration
public class MyConfig {
@Bean
public WebMvcConfigurer webMvcConfigurer(){
return new WebMvcConfigurer() {
@Override
public void configurePathMatch(PathMatchConfigurer configurer) {
UrlPathHelper urlPathHelper =new UrlPathHelper();
urlPathHelper.setRemoveSemicolonContent(false);
configurer.setUrlPathHelper(urlPathHelper);
}
};
}
}
第二种写法 让我们的Myconfig 完成 WebMvcConfigurer 接口
@Configuration
public class MyConfig implements WebMvcConfigurer {
@Override
public void configurePathMatch(PathMatchConfigurer configurer) {
UrlPathHelper urlPathHelper=new UrlPathHelper();
urlPathHelper.setRemoveSemicolonContent(false);
configurer.setUrlPathHelper(urlPathHelper);
}
}
再次拜访 http://localhost:8080/car/sell;low=34;brand=byd,cdi,yd
过错原因
矩阵变量是要写在途径变量中 ,也就是说 我们的拜访url 途径变量为”sell;low=34;brand=byd,cdi,yd”
修改Controller
@RestController
public class MatrixVariableController {
@GetMapping("/car/{path}")
public Map test(@MatrixVariable ("low")Integer low, @MatrixVariable("brand") List<String> brand, @PathVariable("path")String path){
Map map=new HashMap();
map.put("low",low);
map.put("brand",brand);
map.put("path",path);
return map;
}
}
拜访http://localhost:8080/car/sell;low=34;brand=byd,cdi,yd
http://localhost:8080/car/sell;low=34;brand=byd,cdi,yd 这个链接现已处理了,那么这个链接怎样处理呢? <http://localhost:8080/boss/1;age=20/2;age=10
编写Corntoller
@RestController
public class MatrixVariableController {
@GetMapping("/boss/{a}/{b}")
public Map test2(@MatrixVariable(value = "age",pathVar = "a") Integer boosAge,@MatrixVariable(value = "age",pathVar = "b") Integer empId){
Map map=new HashMap();
map.put("bossAge",boosAge);
map.put("empid",empId);
return map;
}
}
成果