Java 请求映射中的路径优先级

Java 请求映射中的路径优先级,java,spring,model-view-controller,Java,Spring,Model View Controller,我已经为此打开了一个问题,但我也想让人们知道 @Controller @RequestMapping("/xxx") public class MyController { @RequestMapping("/**") public ModelAndView getPage() { //some code } @RequestMapping("/**/yyy/") public ModelAndView getPageSecond() { //some code } @Requ

我已经为此打开了一个问题,但我也想让人们知道

@Controller
@RequestMapping("/xxx")
public class MyController {

@RequestMapping("/**")
public ModelAndView getPage() {
   //some code
}

@RequestMapping("/**/yyy/")
public ModelAndView getPageSecond() {
   //some code
}

@RequestMapping("/**/yyy/{pathVariable}")
public ModelAndView getPageThird(@PathVariable("pathVariable") Integer num) {
   //some code
}

}
假设我们有这样一个简单的控制器,我将发送以下请求:

1)
/xxx/aaa/bbb/yyy/
-->好的,它将被映射到
getPageSecond
方法,并将完成他的工作

2)
/xxx/aaa/bbb/yyy/23
-->我认为它必须映射到
getPageThird
方法,但奇怪的是Spring通过
getPage
方法捕获这个请求

我试图深入研究Spring代码以了解那里发生了什么,然后我找到了AntPatternComparator。这个比较器给出的结果用括号括起来,取较小的一个作为最佳匹配


为什么??第三种方法比其他方法更具体,是否有问题?

您可以手动将自己版本的
RequestMappingHandlerMapping
添加到应用程序上下文中,并使用
setPathMatcher(PathMatcher PathMatcher)设置其
patternMatcher
属性
使用您自己的实现来解决您的问题。

@Bart感谢您的回复。我知道我可以配置它。但我想理解为什么春天会做出这样的决定。我认为扩展它是危险的。@oko你说的危险是什么意思?你会延长什么?您只需提供自己的
PatMatcher