IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    Spring mvc @PathVariable 得到的参数包含点号的处理办法

    asuncool@gmail.com(yihaomen)发表于 2016-01-21 22:28:36
    love 0
    在用spring mvc 的时候,遇到一个很奇怪的问题,我需要将一个域名作为参数,传到后台,采用了类似restful 的方式,比如要将 yihaomen.com 传到后台,但后台得到的结果是yihaomen, 点号后面的内容被截断了。也许是 spring mvc 的bug, 但也有处理办法的。

    程序代码 程序代码

    @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, "q" 会显示为 google
    输入: /site/google.com, "q" 任然为 google, 点号后面被截断了。
    输入: /site/google.com.my, "q" 显示为 google.com, 最后一个点号之后的内容被截断了。

    这样的情况在 spring3或者spring 4中均会出现。 有没有好的解决办法呢,就是用正则表达式了:
    程序代码 程序代码

    @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");

        }
    //...


    使用正则表达式,就可以实现了。


沪ICP备19023445号-2号
友情链接