根据 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);
}
}

基于XML的配置

<mvc:annotation-driven enable-matrix-variables="true" />

编写矩阵变量控制器

package com.techmap.examples.controllers;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.MatrixVariable;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping; @Controller
@RequestMapping("/matrix")
public class MatrixController
{ /**
* 使用矩阵变量
*/
@GetMapping("/owners/{ownerId}/pets/{petId}")
public String findPet(
@PathVariable String ownerId,
@PathVariable String petId,
@MatrixVariable(name = "q", pathVar = "ownerId") int q1,
@MatrixVariable(name = "q", pathVar = "petId") int q2)
{
System.out.println("--> ownerId : " + ownerId);
System.out.println("--> petId : " + petId);
System.out.println("--> q1 : " + q1);
System.out.println("--> q2 : " + q2); return "/examples/targets/test1";
} /**
* 矩阵变量可以设置默认值
*/
@GetMapping("/pets/{petId}")
public String findPet(
@MatrixVariable(required = false, defaultValue = "1") int q)
{
System.out.println("--> Default value of q : " + q); return "/examples/targets/test2";
}
}

最新文章

  1. 20161117__Z
  2. linux中mysql如何设置为开机启动
  3. 通过Android录音进行简单音频分析
  4. opencv透视变换
  5. .net微信公众号开发——群发消息
  6. UVALive - 2965 Jurassic Remains (LA)
  7. [RGEOS]绘制多边形Polygon
  8. nodejs学习笔记&lt;一&gt;安装及环境搭建
  9. Websocket协议数据帧传输和关闭连接
  10. Android中SQLite使用
  11. iOS Block 用法 (1)-once again
  12. Nginx与Tomcat安装、配置与优化
  13. nvm进行node多版本管理
  14. Linux显示检查设置文件中的语法是否正确
  15. GWAS基因芯片数据预处理:质量控制(quality control)
  16. sql注入1
  17. 2489 小b和灯泡
  18. springboot项目接入配置中心,实现@ConfigurationProperties的bean属性刷新方案
  19. linux之docker学习
  20. python数据分析Adult-Salary预测

热门文章

  1. PYTHON 得到光标处的句柄
  2. JPA用法中字段起名规范
  3. Java基础00-运算符4
  4. [iconfont_dart]帮你快速生成Icon,再也不用手动写Icon方法
  5. 40.qt quick- 高仿微信实现局域网聊天V4版本(支持gif动图表情包、消息聊天、拖动缩放窗口)
  6. 在Windows7/8/10 64位操作系统下安装并注册ocx控件
  7. Python基础之PyQt5关闭界面
  8. linux ifconfig不可用
  9. ; 按快捷键`(即波浪号~所在的键盘按键)立即打开随身U盘中的办公专用文件夹
  10. 记一次 GitLab 的迁移过程