You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SpringBoot Controller中RequestMapping正则匹配子目录问题求助

解决Spring Boot @RequestMapping正则匹配子目录的问题

我来帮你搞定这个问题~你遇到的问题是因为Spring MVC里@RequestMapping的路径正则语法和普通正则的写法有差异,咱们一步步调整:

问题根源

你原来的写法{reg:\/(dir1|dir2)+}有几个小问题:

  1. 路径变量里不需要额外添加\/,因为@RequestMapping的路径本身已经处理了URL的分隔符;
  2. 正则里的+是多余的——你要匹配的是单个dir1或dir2,不是重复多次的目录名;
  3. Spring的路径变量正则格式是{变量名:正则表达式},而你这里其实不需要捕获变量的话,直接匹配路径即可。

两种可行的解决方案

方案1:直接列举路径(最直观推荐)

如果只是匹配/dir1和/dir2两个路径,直接给value传一个数组就行,简单易懂不容易出错:

@RequestMapping(value = {"/dir1", "/dir2"}, method = RequestMethod.GET)
public void getFile(HttpServletResponse response, HttpServletRequest request) throws IOException {
    // 你的业务逻辑代码
}

方案2:使用正则匹配(适合未来扩展更多目录)

如果以后可能要添加更多类似的目录名,用正则会更灵活。正确的写法是把正则直接写在路径变量里,不需要额外的分隔符:

@RequestMapping(value = "/{dir:dir1|dir2}", method = RequestMethod.GET)
public void getFile(HttpServletResponse response, HttpServletRequest request, @PathVariable String dir) throws IOException {
    // 还可以通过@PathVariable拿到匹配的目录名(比如dir1或dir2)
    // 业务逻辑代码
}

这里的{dir:dir1|dir2}表示:匹配路径中的最后一段为dir1或dir2的请求,同时把这段路径值绑定到dir变量上(如果不需要这个变量,也可以写成{:dir1|dir2},不过保留变量名可读性更好)。

验证测试

启动Spring Boot应用后,访问http://localhost:8080/dir1或http://localhost:8080/dir2,就能成功触发getFile方法了。

内容的提问来源于stack exchange,提问作者LikeTomAndJerry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 10:57:29