springboot开启矩阵传参MatrixVariable
/**
* 根据 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的更多相关文章
- springboot实现xml传参和返回值
1.新建maven工程xml-bean-convert pom.xml如下 <?xml version="1.0" encoding="UTF-8"?&g ...
- JavaScript,ajax与springboot之间的传参方式
Springboot:@PostMapping("/mDelTest")public String mDelTest (@RequestBody List<String> ...
- springboot之json传参(后台控制层如何接收和解析参数)
一般web端都是用form标签的形式进行表单提交到后台,后台控制层再用相应的实体对象去接收前端传来的json参数. 但是有时候前端界面很复杂,要传入后端的参数是各种标签里面的value值,这些值又是来 ...
- Docker 如何动态给SpringBoot项目传参
关于SpringBoot配置数据源 在项目开发中,我们往往需要配置多套不同的配置环境例如:本地开发.测试环境.部署环境.每一个环境的数据源配置可能都不同,因此需要写不同的数据源配置.如果用Docker ...
- SpringBoot系列: Java应用程序传参和SpringBoot参数文件
===========================向java 程序传参的几种形式:===========================1. 使用 OS 环境变量. 这个不推荐. 2. 使用JVM ...
- flask开启debug模式的两种方法、加载配置文件的两种方法、URL传参的四种方法
from flask import Flask app = Flask(__name__) # app.config.update(DEBUG=True)#开启debug模式 #加载配置文件方法一 # ...
- springboot对传参的拦截统一处理
在学习某网<java秒杀系统方案优化>的课程中,学到了一种springboot对传参的拦截统一处理的方式,特记录一下. 如后台方法一般需要根据token从Session中获取User对象, ...
- SpringBoot 2.x (2):请求和传参
其实请求和传参这些知识属于SpringMVC 不过这也属于必须掌握的知识,巩固基础吧 GET请求: 以第一篇文章自动的方式创建SpringBoot项目: 然后新建Controller: package ...
- SpringBoot传参方式
地址传参 1.创建一个Action类 package com.lion.action; import org.springframework.stereotype.Controller; import ...
随机推荐
- 微信小程序云开发-数据库-用户删除数据
一.在商品详情页添加[删除单条数据]按钮 进入goodDetail.wxml页面,添加[删除单条数据]按钮,绑定点击事件removeGood() 二.进入goodDetail.js文件,定义remo ...
- kafka可视化工具
Kafka可视化客户端工具(Kafka Tool 2)的安装和使用 Kafka Tool 2 是一款 Kafka 的可视化客户端工具,可以非常方便的查看 Topic 的队列信息.消费者信息以及 kaf ...
- 从redis数据库取数据存放到本地mysql数据库
redis数据库属于非关系型数据库,数据存放在内存堆栈中,效率比较高. 其存储数据是以json格式字符串存储字典的,而类似的关系型数据库无法实现这种数据的存储. 在爬取数据时,将数据暂存到redis中 ...
- UnitTest 用法
功能 1.能组织多个用例去执行 2.提供丰富的断言方法 3.提供丰富的日志与测试结果 核心要素 1.TestCase 2.TestSuite 3.TextTestRunner 4.Fixture 用法 ...
- 利用docker-compose快速部署测试用数据库服务器
起因 开发中经常需要快速部署一台随用随关的数据库服务器,如mysql,oracle,mongodb,elastic-search 尝试 一直觉得docker特别方便,加上docker-compose. ...
- Qt Creator 入门
Qt 的入门我觉得可以直接从窗口开始,而不是什么"Hello World!".因为Qt 是一个基于图形界面的编程软件,图形界面编程是其核心所在.很久以前,那时候还是Shell编程, ...
- 大数据学习(17)—— HBase表设计
为啥要把表设计拿出来独立成章?因为我觉得像我这样搞了很多年Java后端开发的技术人员,在学习HBase的时候,会受到关系型数据库3NF.BCNF的影响.事实上,数据库范式在HBase里完全没用,必须转 ...
- 数据库建模、面向对象建模>从零开始学java系列
目录 数据库建模 前置知识 使用PowerDesigner数据库建模设计 一对多CDM概念数据模型设计 多对多的PDM物理数据模型设计(针对mysql) PowerDesigner将不同的模型进行转换 ...
- SPOJ ABCDEF题解
题面 源 OJ 未 AC(卡 \(map\) ,不想写 \(hash\) ). 看到 \(n \leq 100\) ,显然 \(O(n^6)\) 会挂掉,所以要优化. 考虑到原式可化为 \(a \ti ...
- Deepin Pwn环境的配置
要学习Pwn Pwn环境那是必不可少滴! 我是新手,我也弄了好久,这里把经验分享给大家!这里感谢I春秋的"知世"老师的脚本!虽然写的不是很完美.还得我自己动手修改!PS:http ...