1.概述

Spring 5带来 PathPatternParser,用于解析URI模板模式。这是以前使用的AntPathMatcher的替代方法。

该AntPathMatcher是Ant风格的路径模式匹配的实现。PathPatternParser将路径分成PathElements的链接列表。这一链条PathElements采取的是PathPattern的模式快速匹配的类。

使用PathPatternParser,还引入了对新URI变量语法的支持。

在本文中,我们将介绍Spring 5.0 WebFlux中引入的新/更新的URL模式匹配器,以及自Spring的较早版本以来一直使用的URL模式匹配器

2. Spring 5.0中的新URL模式匹配器

Spring 5.0发行版添加了一个非常易于使用的URI变量语法:{* foo},以在模式末尾捕获任意数量的路径段。

2.1 使用处理程序方法的URI变量语法{* foo}

我们来看一个URI变量模式{* foo}的示例,另一个使用@GetMapping和处理程序方法的示例。无论我们在" / spring5"之后的路径中输入什么,都将存储在路径变量" id"中:

2.2 使用RouterFunction的 URI变量语法{* foo}

让我们来看一个使用RouterFunction的新URI变量路径模式的示例:

在这种情况下,我们在" / test"之后编写的任何路径都将被捕获在路径变量" id"中。因此,测试用例可能是:

2.3 使用URI变量语法{* foo}来访问资源

如果要访问资源,则需要编写与上一个示例中类似的路径模式。

假设我们的模式是:" / files / {* filepaths}"。在这种情况下,如果路径为/files/hello.txt,则路径变量" filepaths"的值为" /hello.txt",而如果路径为/files/test/test.txt,则路径值为" filepaths" =" /test/test.txt"。

我们的路由功能,用于访问/ files /目录下的文件资源:

假设我们的文本文件hello.txt和test.txt分别包含" hello"和" test"。这可以通过JUnit测试用例进行演示:

3.先前版本中的现有URL模式

现在,让我们看一下较早版本的Spring支持的所有其他URL模式匹配器。所有这些模式都可以通过@GetMapping与RouterFunction和Handler方法一起使用。

3.1 '?' 完全匹配一个字符

如果我们将路径模式指定为:" / t?st ",这将匹配以下路径:" / test"和" / tast",但不匹配" / tst"和" / teest"。

使用RouterFunction及其JUnit测试用例的示例代码:

3.2 '*'匹配路径段中的0个或更多字符

如果我们将路径模式指定为:" / baeldung / * Id",则将匹配以下路径模式:" / baeldung / Id"," / baeldung / tutorialId", " / baeldung / articleId"等:

3.3 '**'匹配0个或更多路径段,直到路径结束

在这种情况下,模式匹配不限于单个路径段。如果我们将模式指定为" / resources / **",它将使所有路径与" / resources /"之后的任意数量的路径段匹配:

3.4 路径变量中的'{baeldung:[az] +}'正则表达式

我们还可以为path变量的值指定一个正则表达式。因此,如果我们的模式类似于" / {baeldung:[az] +}",则路径变量" baeldung"的值将是与给定正则表达式匹配的任何路径段:

3.5 '/ {var1} _ {var2}'同一路径段中的多个路径变量

Spring 5确保只有在由定界符分隔时,才允许在单个路径段中使用多个路径变量。只有这样,Spring才能区分两个不同的路径变量:

4 结论

在本文中,我们介绍了Spring 5中的新URL匹配器以及Spring早期版本中可用的URL匹配器。

匹配路径_深入浅出Spring 5,探索 WebFlux URL匹配相关推荐

  1. docker $PWD路径_深入浅出Docker 镜像

    技术头条:干货.简洁.多维全面.更多云计算精华知识尽在眼前,get要点.solve难题,统统不在话下! 作为云计算的当红明星Docker 来势汹汹,它就像一场森林大火,烧到了我们中间.因为工作的原因, ...

  2. java正则表达式匹配路径_正则表达式教程之位置匹配详解

    本文实例讲述了正则表达式教程之位置匹配.分享给大家供大家参考,具体如下: 注:在所有例子中正则表达式匹配结果包含在源文本中的[和]之间,有的例子会使用Java来实现,如果是java本身正则表达式的用法 ...

  3. spring boot 配置网关时404错误_网关Spring Cloud Gateway科普

    Spring Cloud Gateway是在Spring生态系统之上构建的API网关服务,它旨在提供一种简单而有效的方式来对API进行路由,以及提供一些强大的过滤器功能, 例如:熔断.限流.重试等. ...

  4. aspect 方法入参 获取_谈谈Spring AOP中@Aspect的高级用法示例

    前言 本文主要跟大家分享介绍了关于Spring AOP中@Aspect的高级用法,下面话不多说了,来随着小编一起看看详细的介绍吧. 1 切点复合运算 支持在切点定义中加入以下运算符进行复合运算: 运算 ...

  5. Spring Boot WebFlux-02——WebFlux Web CRUD 实践

    Spring Boot WebFlux-02--WebFlux Web CRUD 实践 第02课:WebFlux Web CRUD 实践 上一篇基于功能性端点去创建一个简单服务,实现了 Hello.这 ...

  6. java正则表达式匹配数字范围_在java中怎么利用正则表达式匹配数字

    在java中怎么利用正则表达式匹配数字 发布时间:2020-12-03 17:47:12 来源:亿速云 阅读:58 作者:Leah 在java中怎么利用正则表达式匹配数字?针对这个问题,这篇文章详细介 ...

  7. 正则匹配查询_如何用MySQL中的正则表达式过滤掉配送单

    需求 最近在用mysql做一个配送单的筛选的需求,比如一个订单表里的订单号有多种,比如以A,B,C,D,F开头的订单,我要同时过滤掉A,B与C的订单,那我要如何做呢?这里你们有其他方法的话,不妨留言哈 ...

  8. python括号匹配问题_支持通配符的括号匹配问题源码+详细流程代码(python)

    问题: 判断一个有左括号和右括号.以及其他ASCII字符组成的表达式是合法. 判断条件是左括号-右括号数目.次序配对,可多层嵌套.如果有*,则*可作为0个或者1个右括号,如果匹配则输出ok,不匹配则输 ...

  9. spring 异常捕获异常_使用Spring跟踪异常–第2部分–委托模式

    spring 异常捕获异常 在上一个博客中 ,我开始谈论需要弄清您的应用程序在生产环境中是否行为异常. 我说过,监视应用程序的一种方法是检查其日志文件是否存在异常,如果发现异常,则采取适当的措施. 显 ...

  10. laravel 分词搜索匹配度_【地名地址】面向智慧城市的高精度地名地址匹配方法...

    点击上方蓝字关注我们↑↑↑↑    原 文 摘 要 针对智慧城市建设中各种业务数据对地名地址匹配准确度和效率不高的问题,本文提出一种面向智慧城市的高精度地名地址匹配方法.该方法在基于中文分词的地名地址 ...

最新文章

  1. 【MATLAB】————拷贝指定文件路径下的有序文件(选择后),可处理固定规律的文件图片数据或者文件
  2. 分布式架构:并发重复请求和幂等场景技术实现总结
  3. H3C交换机版本升级(图形化)
  4. 远程桌面mstsc情况下通过\\tsclient\盘符实现内容的拷贝
  5. 迪米特法则(Law of Demeter) 简介
  6. bzoj 5369: [Pkusc2018]最大前缀和
  7. 华为二层创建vlan_二层交换机不同VLAN实现互通 (华为)
  8. 记一次失败的RecycleView滑动定位
  9. 动手学深度学习环境安装
  10. 我的世界血量显示的服务器,Minecraft|世纪之都|服务器mod:拔刀剑 工业2 高级太阳能 血量显示 Nei 聊天泡泡等...
  11. 实验一:线性表的基本操作实现及其应用
  12. linux udp 端口 抓包,Linux系统-tcpdump常用抓包命令
  13. sqlserver 2000 sp3补丁
  14. 微信小程序 | 自动定时结束录制
  15. iphone、ipad机型分辨率
  16. C# CheckBox/CheckedListBox 复选框/复选框列表
  17. C#窗体猜数字小游戏AB
  18. 车联网---V2X介绍、V2X现有的两大通信标准DSRC和LTE V2X
  19. 基于Python企业公司网站设计与实现 开题报告
  20. UDK 中的委托使用

热门文章

  1. 19. Django进阶:分页
  2. Vue:中向对象中添加数据
  3. 谷歌浏览器:解决Chrome浏览器添加扩展程序报错无法从该网站添加应用、扩展程序和用户脚本
  4. Guava学习笔记(一):Guava新增集合类型-Multimap
  5. Java多线程核心技术
  6. Map遍历KeySet()和EntrySet/ Map.forEach的性能分析
  7. 人工智能领域有哪些曾被拒稿的优秀工作?
  8. 我是如何成为算法工程师的,超详细的学习路线
  9. 给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1](简单易懂)
  10. [洛谷P5431]【模板】乘法逆元2