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

Lit*_*ski 6 java spring spring-mvc request spring-security

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

我按如下方式处理:

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

问题是我在我的应用程序的URL 2-3处网址如下:www.example.com/about,www.example.com/contact等.

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

@RequestMapping("/about")
    public String getAboutPage() {
        return "about";
    }
Run Code Online (Sandbox Code Playgroud)

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

编辑:

我应该处理/about,/contact内部getApp()像:

@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
    }
Run Code Online (Sandbox Code Playgroud)

有没有更好的办法?

cod*_*ark 3

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

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

例如。

@RequestMapping("/about", method = RequestMethod.GET)
Run Code Online (Sandbox Code Playgroud)

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

@RequestMapping("/{str}")
Run Code Online (Sandbox Code Playgroud)

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