Spring 之 AntPathMatcher类

Spring 之 AntPathMatcher类

 

 

官网:https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/util/AntPathMatcher.html

1、简介

SpringMVC的路径匹配规则是依照Ant的来的,实际上不只是SpringMVC,整个Spring框架的路径解析都是按照Ant的风格来的;

AntPathMatcher不仅可以匹配Spring的@RequestMapping路径,也可以用来匹配各种字符串,包括文件路径等。

(1)? 匹配一个字符(除过操作系统默认的文件分隔符)
(2)* 匹配0个或多个字符
(3)**匹配0个或多个目录
(4){spring:[a-z]+} 将正则表达式[a-z]+匹配到的值,赋值给名为 spring 的路径变量.
(PS:必须是完全匹配才行,在SpringMVC中只有完全匹配才会进入controller层的方法)

2、使用示例

public class AntTest {
    
    public static void main(String[] args) {
        antPathMatcher();
    }
    
    public static void antPathMatcher() {
        AntPathMatcher antPathMatcher = new AntPathMatcher();

        // path路径是否符合pattern的规范
        boolean match = antPathMatcher.match("/user/*", "/user/a");
        System.out.println(match); // true
        match = antPathMatcher.match("/user/**", "/user/a/b");
        System.out.println(match); // true
        match = antPathMatcher.match("/user/{id}", "/user/1");
        System.out.println(match); // true
        match = antPathMatcher.match("/user/name", "/user/a");
        System.out.println(match); // false
        // 是否有模糊匹配
        boolean pattern = antPathMatcher.isPattern("user/{id}");
        System.out.println(pattern); // true

        // 匹配是不是以path打头的地址
        boolean matchStart = antPathMatcher.matchStart("/1user/a", "/user");
        System.out.println(matchStart); // false

        // 对路径进行合并 --> /user/a/b
        String combine = antPathMatcher.combine("/user", "a/b");
        System.out.println(combine); // /user/a/b

        // 找出模糊匹配中 通过*或者? 匹配上的那一段配置
        String extractPathWithinPattern = antPathMatcher.extractPathWithinPattern("/user/?", "/user/1");
        System.out.println(extractPathWithinPattern); // 1

        // 找出模糊匹配中 找到匹配上的项 如果匹配规则和要匹配的项规则不一致 会报错
        Map<String, String> extractUriTemplateVariables = antPathMatcher
                .extractUriTemplateVariables("{appName:[\\p{L}\\.]+}-sources-{version:[\\p{N}\\.]+}.jar",
                        "demo-sources-1.0.0.jar");
        if (null != extractUriTemplateVariables) {
            Iterator<String> iterator = extractUriTemplateVariables.keySet().iterator();
            while (iterator.hasNext()) {
                String key = iterator.next();
//                extractUriTemplateVariables:demo
//                extractUriTemplateVariables:1.0.0
                System.out.println("extractUriTemplateVariables:" + extractUriTemplateVariables.get(key));
            }
        }
    }
}

 

注意事项:

匹配文件路径,需要匹配某目录下及其各级子目录下所有的文件,使用/**/*而非*.*,因为有的文件不一定含有文件后缀;

 

posted @ 2021-12-14 23:13  邓维-java  阅读(1258)  评论(0)    收藏  举报