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
。