SpringMVC 使用 @PathVariable 需要注意的地方

先来看一个 SpringMVC 使用 @RequestMapping 和 @PathVariable 的例子

@RequestMapping("/site")
public class SiteController {
    @RequestMapping(value = "/{q}", method = RequestMethod.GET)
    public ModelAndView display(@PathVariable("q") String q) {
        logger.debug("Site : q : {}", q);
        return getModelAndView(q, "site");
    }

//...

看下面的情况: See the following cases :

  • For input /site/google, “q” will display google
  • For input /site/google.com, “q” will still display google, the dot (.) is truncated!?
  • For input /site/google.com.my, “q” will display google.com, the last dot (.) is truncated!
  • For input /site/google.com.my.abc, “q” will display google.com.my
  • For input /site/cloud.google.com, “q” will display cloud.google
  • The last dot (.) is always getting truncated.

注意: 测试 Spring 的版本是 Spring 3 和 Spring 4.

解决方案: To fix it, add a regex mapping {q:.+} in @RequestMapping 为了解决这个问题, 在 @RequestMapping 里增加正则表达式匹配 : {q:.+}

@RequestMapping("/site")
public class SiteController {

    @RequestMapping(value = "/{q:.+}", method = RequestMethod.GET)
    public ModelAndView display(@PathVariable("q") String q) {

        logger.debug("Site : q : {}", q);
        return getModelAndView(q, "site");

    }

//... 现在输入 /site/google.com, "q" 将会输出正确的 google.com

转载于:https://my.oschina.net/pingan1314/blog/837348

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值