springMVc @RequestMapping正则表达式模式的url
@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包含第二个,相当于是父子关系。
解决方法:
将第一个方法改成如下
@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} :三位字母
等等