Spring MVC默认禁用矩阵变量,需手动启用:Java配置中设setRemoveSemicolonContent(false),Spring Boot 2.6+还需配置matching-strategy;使用@MatrixVariable绑定参数时须配合@PathVariable,并可通过pathVar指定归属路径段。

Spring MVC 支持矩阵变量(Matrix Variables),它是一种在 URL 路径段中嵌入键值对的参数传递方式,格式为 /path;key1=value1;key2=value2。默认情况下 Spring 是禁用矩阵变量的,需手动开启并正确配置才能使用。
启用矩阵变量支持
矩阵变量不是默认开启的,需要在配置中显式启用:
- 如果是基于 Java 配置(如
@Configuration类),需在WebMvcConfigurer中重写configurePathMatch方法,并设置setRemoveSemicolonContent(false); - 同时要确保
UrlPathHelper不移除分号内容,否则矩阵变量会被直接截断; - Spring Boot 2.6+ 默认禁用矩阵变量,还需在
application.properties中添加:
spring.mvc.servlet.pathmatch.matching-strategy=ant_path_matcher(仅当使用 Spring Boot 2.6+ 且未升级到 PathPatternParser 时必需);
在 Controller 中接收矩阵变量
使用 @MatrixVariable 注解绑定路径段中的矩阵参数:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 必须配合
@PathVariable使用,因为矩阵变量依附于某个路径段; - 例如请求 URL 为
/users/123;role=admin;lang=zh,则可这样接收:
@GetMapping("/users/{id}")
public String getUser(@PathVariable String id,
@MatrixVariable(required = false) String role,
@MatrixVariable(required = false) String lang) {
// role="admin", lang="zh"
return "user";
}
若一个路径段含多个矩阵变量,也可用 Map<String, String> 接收:
@MatrixVariable Map<String, String> matrixVars
处理多段路径中的矩阵变量
当 URL 含多个路径段且都带矩阵变量时(如 /books/1;v=1.0/authors/2;format=json),需明确指定变量归属:
- 用
@MatrixVariable(pathVar = "xxx")指定其属于哪个@PathVariable; - 例如:
@MatrixVariable(pathVar = "bookId") String version对应/books/1;v=1.0中的v;@MatrixVariable(pathVar = "authorId") String format对应/authors/2;format=json中的format;
注意事项与常见问题
矩阵变量容易因配置遗漏而失效:
- 确保控制器方法参数上有对应
@PathVariable,否则@MatrixVariable无法解析; - Tomcat 等容器默认将分号视为 URL 分隔符(用于 session ID),可能提前截断。可通过设置
server.tomcat.relaxed-path-chars=;`(Spring Boot 2.3+)或自定义TomcatServletWebServerFactory解决; - 前端发请求时注意 URL 编码:分号
;通常无需编码,但若路径中含特殊字符(如空格、逗号),需整体 encode; - 不推荐在公开 API 中广泛使用矩阵变量——可读性差、部分客户端/网关不友好,更适合内部服务或特定场景(如版本化资源路径)。

















