1、知识点:
1)、矩阵变量(访问路径上以“;”链接的数据)与对应的获取方法。
矩阵变量格式一:
- `<``a ``href``="getMatrixVariable/paths;username=``张三``;interesting=java;interesting=c++"``>@MatrixVariable</``a``>` 。其中,`paths` 代表整个矩阵变量的名称。
- 获取方法一:
①、
@RequestMapping``(value = ``"/getMatrixVariable/{path}"``)
首先方法处理器中,通过EL表达式/{path}
获取整个矩阵变量paths
。
②、@PathVariable``(``"path"``) ``String ``path,
先得到@RequestMapping
中,整个矩阵变量paths
+
③、@MatrixVariable``(``"username"``) ``String ``name
。得到变量名为username
的值 +
④、@MatrixVariable``(``"interesting"``) ``List``<``String``> interesting
得到所有变量名为interesting
对应的所有的值的List集合。矩阵变量格式二:
- `<``a ``href``="getMatrixVariable2/1;age=25/2;age=30"``>@MatrixVariable2</``a``>。`1表示id ,age=25表示id下的变量age=25。
- 获取方法二:
①、
@RequestMapping``(value = ``"/getMatrixVariable2/{id1}/{id2}"``)
首先方法处理器中,通过EL表达式/{id1}/{id2}
获取矩阵id1与2
。
②、@MatrixVariable``(value = ``"age"``,pathVar = ``"id1"``) ``Integer ``age1,
通过id获取,id对应的数据。
慨念:- 根据 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 模板来表示这些矩阵变量。这样的话,不管矩阵变量顺序如何,都能够保证请求可以正确的匹配。
2)、开启矩阵变量。
方式一: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);
}
}
方式二:在配置类中,重写 configurePathMatch
方法。
package com.wzy.springbootweb01.boot;
@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);
}
};
}
}
方式三:基于SringMVC配置XML文件。
<mvc:annotation-driven enable-matrix-variables="true" />
3、使用
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<a href="getMatrixVariable/paths;username=张三;interesting=java;interesting=c++">@MatrixVariable</a><br/>
<a href="getMatrixVariable2/1;age=25/2;age=30">@MatrixVariable2</a><br/>
</body>
</html>
package com.wzy.springbootweb01.controller;
@RestController
public class MyController2MatrixVariable {
//@PathVariable + @MatrixVariable 获取矩阵变量的值。
@RequestMapping(value = "/getMatrixVariable/{path}",method = RequestMethod.GET)
public Map getMatrixVariable(@PathVariable("path") String path,
@MatrixVariable("username") String name,
@MatrixVariable("interesting") List<String> interesting){
Map<String,Object> map = new HashMap<>();
map.put("path",path);
map.put("username",name);
map.put("interesting",interesting);
return map;
}
//MatrixVariable获取矩阵变量的值。
//getMatrixVariable2/1;age=25/2;age=30
@RequestMapping(value = "/getMatrixVariable2/{id1}/{id2}",method = RequestMethod.GET)
public Map getMatrixVariable2(@MatrixVariable(value = "age",pathVar = "id1") Integer age1,
@MatrixVariable(value = "age",pathVar = "id1") Integer age2){
Map<String,Object> map = new HashMap<>();
map.put("age1",age1);
map.put("age2",age2);
return map;
}
}