【问题标题】:Spring Boot: @RequestMapping PrioritySpring Boot:@RequestMapping 优先级
【发布时间】:2025-12-18 21:15:01
【问题描述】:

我的Spring Boot应用遇到了如下问题:

我有两个@RequestMapping

@RequestMapping(value = "/{categorySlug:^[a-z0-9-]+$}/{slug:^[a-z0-9-]+$}")
public ModelAndView aTutorial(

        @PathVariable(value = "categorySlug", required = false) String categorySlug,

        @PathVariable(value = "slug") String slug) {

    // (1)
}

@RequestMapping(value = "/questions/**")
public ModelAndView fix404() {

    // (2)
}

我使用(2)将404页面重定向到主页。

但是当我去像https://w3stacks.com/questions/fix这样的网址时,我希望它(2)但它请求在(1)中处理,/questions/fix{categorySlug)/{slug}重合。

那么在(2)上怎么做,或者说可以自定义@RequestMapping之间的优先级还是不可以呢?

谢谢。

【问题讨论】:

  • 我刚刚尝试删除正则表达式/{categorySlug}/{slug},但它保持在(1),@bureaquete

标签: spring-boot request-mapping


【解决方案1】:

您可以忽略aTutorial API 的categorySlugquestions 词。 类似的东西;

@RequestMapping(value = "/{categorySlug:^(?!questions)[a-z0-9-]+$}/{slug:^[a-z0-9-]+$}")

这样,您将不会在aTutorial API(如/questions/etc)中收到任何以questions 开头的调用,但也会忽略/questionsCategory/etc

因此fix404 端点将按照您的需要正确使用。

【讨论】:

  • 但它必须(2)不?我希望它(2)然后重定向到主页 - @bureaquete
  • 是的,我给的@RequestMapping是针对(1)的,所以你的电话/questions/**可以到达(2)