/**
*   根据 URI 规范 RFC 3986 中 URL 的定义,路径片段中可以可以包含键值对。
* 规范中没对对应的术语。一般 “URL 路径参数” 可以被应用,尽管更加独特的 “矩阵 URI” 也经常被使用并且相当有名。
* 在 Spring MVC 它被成为矩阵变量
* 矩阵变量可以出现在任何路径片段中,每一个矩阵变量都用分号(;)隔开。
* 比如 “/cars;color=red;year=2012”。
* 多个值可以用逗号隔开,比如 “color=red,green,blue”,或者分开写 “color=red;color=green;color=blue”。
*
*     如果你希望一个 URL 包含矩阵变量,那么请求映射模式必须用 URI 模板来表示这些矩阵变量。
* 这样的话,不管矩阵变量顺序如何,都能够保证请求可以正确的匹配。
* Springboot 默认是无法使用矩阵变量绑定参数的。需要覆盖WebMvcConfigurer中的configurePathMatch方法。
*/
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void configurePathMatch(PathMatchConfigurer configurer) {
UrlPathHelper urlPathHelper=new UrlPathHelper();
urlPathHelper.setRemoveSemicolonContent(false);
configurer.setUrlPathHelper(urlPathHelper);
}
}


/**
* Spring也支持URL
* 中的矩阵变量,所谓矩阵变量,就是出现在路径片段中,通过符号“;”
* 分割的多个变量,比如/user/id=123 ;status= l/update.json
*/
@GetMapping(value = "/owners/{ownerId}/pets/{petId}")
public void ju(@PathVariable String ownerId,
@PathVariable String petId,@MatrixVariable(value="q", pathVar="ownerId") String q1,
@MatrixVariable(value="q", pathVar="petId") String q2) {
System.out.println("id:"+q1+":"+"df:"+q2);
System.out.println("ownerId:"+ownerId+":"+"petId:"+petId);
System.out.println("123456789");
}

//            /s1/1;a=1/s2/2;b=2/s3/3;c=3
// (1). pathVar = "s1" ,意味着处理范围为: 1;a=1
// (2). value = "a", 指定pathVar里的 变量a。
// (3). required = false , url可以没有这个变量a,c默认是true。
默认情况下即为true情况下缺少变量会抛异常
异常:{
{
  "timestamp": "2020-06-17T02:31:29.760+0000",
  "status": 404,
  "error": "Not Found",
  "message": "No message available",
  "path": "/owners//owners/2;q\u003d1/pets/3"
}

}
//预测 s1,s2,s3一次为1,2,3
//a为1 b,c为null

@GetMapping(value ="/s1/{s1}/s2/{s2}/s3/{s3}")
public void zhen(@PathVariable String s1,
@PathVariable String s2,
@PathVariable String s3,
@MatrixVariable(value="a", pathVar="s1") String a,
@MatrixVariable(value="b", pathVar="s2",required =false) String b,
@MatrixVariable(value="c", pathVar="s3",required =false) String c){
System.out.println("s1=====》"+s1);
System.out.println("s1=====》"+s2);
System.out.println("s1=====》"+s3);
System.out.println("a======》"+a);
System.out.println("b======》"+b);
System.out.println("c======》"+c);

}

最新文章

  1. jsf初学解决GlassFish Server 无法启动
  2. 让Team Foundation Server/TFS自动记住用户名密码解决方案
  3. HTML 头部标记
  4. C# ToString常用技巧总结
  5. MySql 1045错误
  6. VS2008编译boost库
  7. PHP学习笔记11-表单
  8. A shallow summary of oracle log miner
  9. UICollectionView之自定义Layout
  10. iOS Foundation框架 -1.常用结构体的用法和输出
  11. Shader 入门笔记(一)
  12. springMVC工作过程
  13. SrpingBoot部署到云服务器
  14. 7.4mybatis整合ehcache(mybatis无法实现分布式缓存必须和其他缓存框架整合)
  15. ueditor的简单用法
  16. 附加题(一)——interesting的抄袭现象
  17. Sublime Text3—系统设置
  18. js计算字符串的字节数和字符串与二进制的相互转化
  19. Map和JSON的互相转换
  20. HTTPS网站的内幕

热门文章

  1. bootstrap与vue的区别是什么?(十七)
  2. [考试总结]noip模拟16
  3. LUSE: 无监督数据预训练短文本编码模型
  4. 如何使用Git Flow 进行hotfix
  5. 【python与机器学习实战】感知机和支持向量机学习笔记(一)
  6. 太细了!阿里十年技术专家联合打造“最新”Jetpack强化实战手册
  7. Linux命令(一)之目录结构、Linux终端操作、关机重启等一些基本操作
  8. Ubuntu安装ssh,及失败解决方案
  9. 保存Total Commander的列宽
  10. 图 邻接表 邻接矩阵 BFS生成树 DFS生成树