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} :三位字母
等等
分类:
java
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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)