7

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

我处理如下:

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

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

我为他们写了请求映射如下:

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

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

编辑:

我应该在里面处理/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
    }

有没有更好的办法?

4

1 回答 1

3

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

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

例如。

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

或者,您可以删除包罗万象的方法规范:

@RequestMapping("/{str}")

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

于 2013-03-12T16:01:42.063 回答