首页 > 其他分享 >SpringBoot路径匹配

SpringBoot路径匹配

时间:2023-10-24 23:24:24浏览次数:26  
标签:匹配 SpringBoot PathPatternParser 路径 html path 任意

Spring5.3 之后加入了更多的请求路径匹配的实现策略;
以前只支持 AntPathMatcher 策略, 现在提供了 PathPatternParser 策略。并且可以让我们指定到底使用那种策略。

1. Ant风格路径用法

Ant 风格的路径模式语法具有以下规则:

  • *:表示任意数量的字符。
  • ?:表示任意一个字符。
  • **:表示任意数量的目录。
  • {}:表示一个命名的模式占位符。
  • []:表示字符集合,例如[a-z]表示小写字母。

例如:

  • *.html 匹配任意名称,扩展名为.html的文件。
  • /folder1/*/*.java 匹配在folder1目录下的任意两级目录下的.java文件。
  • /folder2/**/*.jsp 匹配在folder2目录下任意目录深度的.jsp文件。
  • /{type}/{id}.html 匹配任意文件名为{id}.html,在任意命名的{type}目录下的文件。

注意:Ant 风格的路径模式语法中的特殊字符需要转义,如:

  • 要匹配文件路径中的星号,则需要转义为\\*
  • 要匹配文件路径中的问号,则需要转义为\\?

2. 模式切换

AntPathMatcherPathPatternParser

  • PathPatternParser 在 jmh 基准测试下,有 6~8 倍吞吐量提升,降低 30%~40%空间分配率
  • PathPatternParser 兼容 AntPathMatcher语法,并支持更多类型的路径模式
  • PathPatternParser "**" 多段匹配的支持仅允许在模式末尾使用
@Slf4j
@RestController
public class HelloController {

    @GetMapping("/a*/b?/{p1:[a-f]+}")
    public String hello(HttpServletRequest request,
                        @PathVariable("p1") String path) {

        log.info("路径变量p1: {}", path);
        //获取请求路径
        String uri = request.getRequestURI();
        return uri;
    }
}

总结:

  • 使用默认的路径匹配规则,是由 PathPatternParser 提供的
  • 如果路径中间需要有 **,替换成ant风格路径
# 改变路径匹配策略:
# ant_path_matcher 老版策略;
# path_pattern_parser 新版策略;
spring.mvc.pathmatch.matching-strategy=ant_path_matcher

标签:匹配,SpringBoot,PathPatternParser,路径,html,path,任意
From: https://www.cnblogs.com/zjw-blog/p/17785972.html

相关文章

  • springboot生成二维码的正确姿势-附视频附源码
    @目录前言初始化SpringBoot项目引入依赖编码编写工具类生成二维码资源共享二维码的原理是什么,如何保证不重复?你有没有想过这样一件事,二维码是实现原理是什么?如何保证各个平台的二维码是唯一的?就算你的程序停止运行,但是你的二维码依然存在。设计上要保证唯一性,比如在物流等环......
  • springboot洗衣店管理系统-计算机毕业设计源码+LW文档
    摘 要随着时代的发展,人们的工作也学习压力越来越大,很多时候空闲时间也越来也少,经常没有时间去洗自己的衣服,很多商家在看到这种情况之后开设了洗衣机店专门用于服务这些没有时间洗衣服的人,但是传统的洗衣店都是用手动的的模式在管理,这种模式很落后,为了改善这一情况很多地方开设了......
  • SpringBoot 实现大文件上传下载、分片、断点续传教程
    WebUploader是由BaiduWebFE(FEX)团队开发的一个简单的以HTML5为主,FLASH为辅的现代文件上传组件。大文件上传实现思路:分片: 按照自定义缓冲区大小,将大文件分成多个小文件片段。断点续传: 根据分片数量,给每个小文件通过循环起对应名称,当文件下载中断在续传时,判断小文件名称若存在......
  • php js正则 解决 详情页图片超出问题 匹配img标签内容追加style样式,给富文本中的图片
    做小程序或手机端经常会遇到商品详情,文章详情里带图片的从别的地方复制过来带着样式,导致超出屏幕显示不全的问题php解决functionformat_img($content,$style=''){if(empty($style))$style='max-width:100%;height:auto;';$content=preg_replace("/(\<img)(?!(.*?styl......
  • python引用相对路径
    文件夹ants/bees文件夹与learn_data.py隶属于同一个目录data_process   所以引用相对路径的方式即为:classMyData(Dataset):def__init__(self,root_dir,label_dir):self.root_dir=root_dir#根目录,即hymenoptera_data/trainself.label_......
  • python当前工作目录和当前文件的绝对路径
    当前文件的绝对路径:这个就是文件在硬盘上的真实路径,从盘符一直到文件所在的具体位置。当前工作目录(currentworkingdirectory)是文件系统当前所在的目录,如果命令没有额外指定路径,则默认为当前工作目录。    importos#当前文件的绝对路径print(os.path.abspath(......
  • springboot日志配置
    目录logback知识链接......
  • Java:自定义实现SpringBoot Starter
    (目录)1、自定义Starter1.1、项目结构$tree.├──pom.xml└──src├──main│├──java││└──com││└──example││└──demo││├──ReadingConfiguration.java......
  • SpringBoot不再需要@Autowired来注入属性
    实操部分需要lombok依赖在对应需要注入属性的类上添加注解@RequiredArgsConstructor所有需要注入的属性改为final修饰为什么lombok的@RequiredArgsConstructor会生成一个有参(所有的用final修饰的属性)构造器spring的自动注入会直接根据有参构造器进行注入......
  • Gradle构建SpringBoot单模块项目
    Gradle构建SpringBoot单模块项目方式Ⅰ:未基于:GradleWrapper方式Ⅱ:(推荐使用)GradleWrapper【可以不安装Gradle、统一Gradle的版本】——包括Maven也是一样的可以用Wrapper的方式版本:JDK8+SpringBoot2.7.15+Gradle8.x本篇主要讲实现。Gradle与Maven的区别自己去看Ⅰ、普......