【问题标题】:How to exclude url mappings from @RequestMapping in Spring?如何在 Spring 中从 @RequestMapping 中排除 url 映射?
【发布时间】:2026-02-07 12:40:01
【问题描述】:

我有一个请求映射,可以处理上下文之后的任何字符串,例如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/aboutwww.example.com/contact强>等

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

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

但很明显,因为我已经声明任何字符串都应该由getApp() 处理,所以getAboutPage() 永远不会被执行。 如何从getApp() 映射中排除/about/contact 等。 我们显然可以在 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
    }

有没有更好的办法?

【问题讨论】:

  • 感谢@Sazzadur 对其进行编辑以提高可读性。

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


【解决方案1】:

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

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

例如。

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

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

@RequestMapping("/{str}")

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

【讨论】:

  • 加油!指定方法,它现在可以工作了!非常感谢。