springMVC中/*与/**匹配的区别

在 Spring MVC 中,这两个模式只差了一颗星,但匹配的"深度"完全不同。

一句话:

  • /user/* 只能匹配一级,即 /user/abc/user/123 都 OK,但 /user/abc/profile 就不行。
  • /user/** 可以匹配无限多级,即 /user 及其下面任意层级的路径都 OK,例如 /user/user/abc/user/abc/profile/user/a/b/c/d 等。

下面把规则展开说清,并给出代码示例,方便你一眼看出区别。


  1. Ant 风格路径通配符规则(Spring 用到)
  • ? 匹配任意单个字符
  • * 匹配任意一段 字符(不能跨 /
  • ** 匹配任意多段 字符(可以跨 /,必须是整个路径段)
  1. 对应关系
    模式 能否匹配 举例

/user/* 只能匹配 /user/ 下一级 /user/123 ✔

/user/123/info ✘

/user/** 可匹配 /user 及其下任意层级 /user ✔

/user/123 ✔

/user/123/info ✔

/user/a/b/c/d ✔

  1. 代码示例
java 复制代码
@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 只拦截 /user/ 下一级
        registry.addInterceptor(new UserInterceptor())
                .addPathPatterns("/user/*");

        // 拦截 /user 及其所有子路径
        // registry.addInterceptor(new UserInterceptor())
        //         .addPathPatterns("/user/**");
    }
}
  1. 容易踩的坑
  • /user/* 不会匹配到 /user 本身(因为 * 至少要有一段字符)。
    如果你想把 /user 也一起拦截,需要再加一条 /user 或者改用 /user/**
  • 如果用了 /** 又只想排除某些子路径,记得再配合 excludePathPatterns("...") 使用。

结论

记住一句话:

"单星只走一层,双星层层通吃"。

根据业务需要选择即可。

相关推荐
折哥的程序人生 · 物流技术专研9 小时前
《Java 100 天进阶之路》第14篇:Java final关键字详解
java·开发语言·后端·面试
IT当时语_青山师__JAVA技术栈9 小时前
数组与链表深度解析:从内存布局到工业级实践
java·算法·面试
海棠Flower未眠9 小时前
Spring Boot 2.4后,特定配置文件不能再使用spring.profiles.include的解决思路
数据库·spring boot·spring
java1234_小锋9 小时前
Spring AI 2.0 开发Java Agent智能体 - 工具调用(Function Calling / Tools)
java·人工智能·spring
Cosmoshhhyyy9 小时前
《Effective Java》解读第 52 条:慎用重载
java·开发语言·windows
大大杰哥9 小时前
温故知新:Java 线程创建方式的演进与总结
java·开发语言·jvm
凯瑟琳.奥古斯特9 小时前
死锁四大必要条件解析
java·开发语言·后端·职场和发展
冰的第三次元9 小时前
接口,抽象的避坑指南和多态的“两面派”真相
java
挫折常伴左右9 小时前
IDEA和PYCHARM激活冲突解决
java·pycharm·intellij-idea
不知名的忻9 小时前
关键路径(Java)
java·数据结构·算法·关键路径