springMVc @RequestMapping正则表达式模式的url

1
2
3
4
5
6
7
8
9
10
@RequestMapping(method = RequestMethod.GET,value="/{provinceId}_{levelId}.htm")
    public Map<String, Appointment> test() {
        return appointmentBook.getAppointmentsForToday();
    }
 
 
@RequestMapping(method = RequestMethod.GET,value="/{provinceId}_{levelId}_s{id}.htm")
    public Map<String, Appointment> test1() {
        return appointmentBook.getAppointmentsForToday();
    }

  如上两个url,当我在浏览器上输入/2_3_s1.htm(此处省略url前面的东西),老是进入第一个方法,而且你两个方法的顺序调换也是一样的,总是进入第一个,其实问题不难看出来。其实第一个url就是包含了第一个的,/2_3_s1.htm的请求链接两个方法都符合(相当于把3_s1看成了一个整体,所以说第一个方法也符合),至于为什么进入第一个,应该是第一个url包含第二个,相当于是父子关系。
解决方法:

将第一个方法改成如下

1
2
3
4
@RequestMapping(method = RequestMethod.GET,value="/{provinceId}_{levelId:\\d*}.htm")
    public Map<String, Appointment> test() {
        return appointmentBook.getAppointmentsForToday();
    }

  就是在levelId后面加了\\d*,就是加了一个正则表示levelId只能匹配整数,这样写的话,我们之前的链接/2_3_s1.htm就会进入第二个方法,因为你把3_s1即使看成一个链接也不符合整数这个条件,所以就会进入第二个方法。
\\d{6}:表示6位数字
\\?-[0,9]d:表示负整数
[a-z]{3} :三位字母
等等

posted @   浅笑19  阅读(835)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示