SpringMVC
的矩阵变量(学习笔记,2021.01.17)
前言:
根据 URI 规范 RFC 3986 中 URL 的定义,路径片段中可以可以包含键值对。规范中没对对应的术语。一般 “URL 路径参数” 可以被应用,尽管更加独特的 “矩阵 URI” 也经常被使用并且相当有名。在 Spring MVC 它被成为矩阵变量
矩阵变量可以出现在任何路径片段中,每一个矩阵变量都用分号(;)隔开。比如 “
/get;name=zhihao;age=18
”。多个值可以用逗号隔开,比如 “age=18,20,25
”,或者分开写 “age=18;age=20;age=25
”。如果你希望一个 URL 包含矩阵变量,那么请求映射模式必须用 URI 模板来表示这些矩阵变量。这样的话,不管矩阵变量顺序如何,都能够保证请求可以正确的匹配。
SpringMVC中使用矩阵变量
1.0 上下文配置文件中启用矩阵变量
<mvc:annotation-driven enable-matrix-variables="true" />
1.1 编写接收矩阵变量的Controller
/**
* 矩阵变量是包含在路径中的, 所以/get/xxx;name=zhohao;ages=18,20,25, 必须包含path
*
* @param path
* @param name
* @param ages
* @return java.util.Map<?,?>
* @author: ZhiHao
* @date: 2021/1/17
*/
@GetMapping("/get/{path}")
public Map<?, ?> get(@PathVariable("path") String path,
@MatrixVariable("name") String name,
@MatrixVariable("ages") List<Integer> ages) {
Map<String, Object> result = new HashMap<>();
result.put("name", name);
result.put("path", path);
result.put("ages", ages);
return result;
}
1.2 请求后输出的结果
SpringBoot中使用矩阵变量
1.0 启用Boot使用矩阵变量
org.springframework.web.util.UrlPathHelper
中private boolean removeSemicolonContent = true;
默认是不启用的, 进行启用。
@Configuration
public class WbeConfig implements WebMvcConfigurer {
@Override
public void configurePathMatch(PathMatchConfigurer configurer) {
UrlPathHelper urlPathHelper = new UrlPathHelper();
urlPathHelper.setRemoveSemicolonContent(false);
configurer.setUrlPathHelper(urlPathHelper);
}
}
1.1 编写接收矩阵变量的Controller
(同上面一模一样)
1.2 请求结果
PS, 只是提供了另一种传递参数的方式, 这种情况工作中很少使用, 基本都是使用
querySteing
方式 :
http://localhost:8080/get/路径?name=zhohao&ages=18&ages=20&ages=25
后端接收:
@GetMapping("/gets") public Map<?, ?> gets(String name,String ages) { String[] split = ages.split(","); Map<String, Object> result = new HashMap<>(); result.put("name", name); result.put("ages", split); return result; }
1