如何从Spring中的@RequestMapping中排除url映射?

时间:2013-03-12 14:42:01

标签: java spring spring-mvc spring-security request

我有一个请求映射,用于处理上下文之后的任何字符串,例如的 www.example.com/anystring

我正按以下方式处理:

@RequestMapping(value="/{str}", method = RequestMethod.GET)
public String getApp(@PathVariable("str") String anyString, ModelMap model) {
        //Do something
    }

问题是我的应用中有2-3个网址,网址如下: www.example.com/about www.example.com/contact 等等。

我为他们编写了Request Mappings,如下所示:

@RequestMapping("/about")
    public String getAboutPage() {
        return "about";
    }

但很明显,因为我已经声明任何字符串应该由getApp()处理,所以getAboutPage()永远不会被执行。 如何从/about映射中排除/contactgetApp()等。 我们显然可以在URL字符串中添加另一个关键字,但这在我的应用程序用例中是不可能的。 请帮助。 :(

修改

我应该只在/about内处理/contactgetApp(),如:

@RequestMapping(value="/{str}", method = RequestMethod.GET)
    public String getApp(@PathVariable("str") String anyString, ModelMap model) {

    if(anyString.equals("about")){
     //do about related stuff
    }

    if(anyString.equals("contact")){
     //do contact related stuff
    }

    //Do something
    }

有更好的方法吗?

1 个答案:

答案 0 :(得分:3)

在“catch-all”映射中指定HTTP请求方法可能使路径匹配器认为它比绝对路径映射更具体。

在绝对路径上指定请求方法,映射比较器应在包含路径变量的绝对匹配之前对绝对匹配进行排序。

例如

@RequestMapping("/about", method = RequestMethod.GET)

或者,您可以删除catch-all上的方法规范:

@RequestMapping("/{str}")

它完全取决于您的网址结构以及这些路径中的任何一个是否会接受不同的http请求方法。