如何在Controller中映射两个不同的URL:一个带有param的url和没有param的同一个url?

时间:2015-06-09 14:16:05

标签: java spring spring-mvc

我有两个要映射的网址: root:http://www.website.com:当用户请求root时我想显示主页。 带参数的根http://www.website.com?ref=xxxx:当用户请求时,我想创建一个cookie并转到root(" /")。

这是我的控制器:

@RequestMapping(value="/",method=RequestMethod.GET)
public String doGreatThings(
    @RequestParam(value="ref", required=false) String identifier,
    ServletRequest request, 
    ServletResponse response){

        if(identifier!=null){

        }
        return "/";
    }

这给了我一个无限循环。是否可以区分控制器中的两个映射?

http://www.mywebsite.com

VS

http://www.mywebsite.com?ref=xxxxx

2 个答案:

答案 0 :(得分:2)

以前的一些评论中链接的answer是要走的路。

您应该使用params的{​​{1}}属性按param过滤,但请注意您也可以否定此过滤器,因此请映射到不包含参数的网址。以下应该是适合您的映射

没有参数的映射请注意标记否定的@RequestMapping

!

使用参数

的映射
@RequestMapping(value="/",method=RequestMethod.GET, params="!ref")
public ModelAndView doGreatThings(
    @RequestParam(value="ref", required=false) String identifier,
    ServletRequest request, 
    ServletResponse response){
    // show home page
}

答案 1 :(得分:0)

我根据@kryger评论编辑了我的答案,您可以使用params属性按参数进行过滤。

请检查此link以获取原始答案。