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

       

   公司最近忙,好一些时间没有写了。今天写一个springMVC的一个很普遍的知识。有时候大家可能会遇到如下问题;


@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} :三位字母
等等
总的一句话就是可以用正则表达式解决上诉问题。

还有一个额外的知识点,有时候公司为了要求规范url,有时候一样的方法,就是要写出两个url,这里可以不用再写两个方法了,一个方法指定多个值如:@RequestMapping(value={"/foo","/bar"})



























评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值