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

}

springboot开启矩阵传参MatrixVariable的更多相关文章

  1. springboot实现xml传参和返回值

    1.新建maven工程xml-bean-convert pom.xml如下 <?xml version="1.0" encoding="UTF-8"?&g ...

  2. JavaScript,ajax与springboot之间的传参方式

    Springboot:@PostMapping("/mDelTest")public String mDelTest (@RequestBody List<String> ...

  3. springboot之json传参(后台控制层如何接收和解析参数)

    一般web端都是用form标签的形式进行表单提交到后台,后台控制层再用相应的实体对象去接收前端传来的json参数. 但是有时候前端界面很复杂,要传入后端的参数是各种标签里面的value值,这些值又是来 ...

  4. Docker 如何动态给SpringBoot项目传参

    关于SpringBoot配置数据源 在项目开发中,我们往往需要配置多套不同的配置环境例如:本地开发.测试环境.部署环境.每一个环境的数据源配置可能都不同,因此需要写不同的数据源配置.如果用Docker ...

  5. SpringBoot系列: Java应用程序传参和SpringBoot参数文件

    ===========================向java 程序传参的几种形式:===========================1. 使用 OS 环境变量. 这个不推荐. 2. 使用JVM ...

  6. flask开启debug模式的两种方法、加载配置文件的两种方法、URL传参的四种方法

    from flask import Flask app = Flask(__name__) # app.config.update(DEBUG=True)#开启debug模式 #加载配置文件方法一 # ...

  7. springboot对传参的拦截统一处理

    在学习某网<java秒杀系统方案优化>的课程中,学到了一种springboot对传参的拦截统一处理的方式,特记录一下. 如后台方法一般需要根据token从Session中获取User对象, ...

  8. SpringBoot 2.x (2):请求和传参

    其实请求和传参这些知识属于SpringMVC 不过这也属于必须掌握的知识,巩固基础吧 GET请求: 以第一篇文章自动的方式创建SpringBoot项目: 然后新建Controller: package ...

  9. SpringBoot传参方式

    地址传参 1.创建一个Action类 package com.lion.action; import org.springframework.stereotype.Controller; import ...

随机推荐

  1. PAT乙级:1082 射击比赛 (20分)

    PAT乙级:1082 射击比赛 (20分) 题干 本题目给出的射击比赛的规则非常简单,谁打的弹洞距离靶心最近,谁就是冠军:谁差得最远,谁就是菜鸟.本题给出一系列弹洞的平面坐标(x,y),请你编写程序找 ...

  2. c#链接MySql数据库方法

    方法一: 打开visual studio,在项目->管理NuGet程序包->搜索"MySql.Data"并安装: 在程序部分,引入 using MySql.Data.M ...

  3. Hive开发要知道数据仓库的四个层次设计

    数据仓库:数据仓库全面接收源系统数据,ETL进程对数据进行规范化.验证.清洗,并最终装载进入数据集市,通过数据集市支持系统进行数据查询.分析,整个数据仓库包含四大层次. 1.数据仓库的四个操作    ...

  4. Python入门 -- 001

    在Windows系统下安装python: 从Python的官方网站(http://www.python.org/)下载最新版的程序安装包. 安装完成后设置路径,使得在Windows系统的CMD中能够通 ...

  5. HashSet 的实现原理

    HashSet 概述 对于 HashSet 而言,它是基于 HashMap 实现的,底层采用 HashMap 来保存元素,所以如果对 HashMap 比较熟悉了,那么学习 HashSet 也是很轻松的 ...

  6. IOS自动化测试环境搭建(Python & Java)

         一.前言 IOS的App自动化测试与Android的一样,也可以用appium来进行.但是IOS自动化依赖苹果的osx系统.Xcode构建等,且封闭的系统需要苹果开发者账号才可以驱动真机.A ...

  7. Commons-Beanutils利用链分析

    前言 本篇开始介绍 commons-beanutils 利用链,注意Commons-Beanutils 不是Commons-Collections 不要看混了,首先来看一下,什么是 commons-b ...

  8. MySQL-初见

    目录 初识MySQL 数据库基本命令 创建数据库表 数据库引擎 修改和删除表字段 MySQL数据管理 DML语言 DQL查询数据 单表查询 WHERE条件子句 模糊查询:比较操作符 联表查询 排序查询 ...

  9. 解决win10快速访问不能取消固定

    最近发现win10的快速访问不能取消固定,比如ftp和smb之类的都不能取消固定 最后百度了一下发现一个简易的方法: 在文件资源管理器地址栏输入:%APPDATA%\Microsoft\Windows ...

  10. ELK太重?试试KFC日志采集

    写在前面 ELK三剑客(ElasticSearch,Logstash,Kibana)基本上可以满足日志采集.信息处理.统计分析.可视化报表等一些日志分析的工作,但是对我们来说--太重了,并且技术栈不是 ...