@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} :三位字母
等等
