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

posted @ 2021-02-02 22:38  浅笑19  阅读(791)  评论(0编辑  收藏  举报