在Spring MVC中订购了RequestMapping

Phư*_*yễn 9 spring-mvc

我正在使用Annotated Controller开发一个Spring MVC项目.我感兴趣的一件事是关于@RequestMapping要处理的指令的顺序.例如,我希望所有/green/basic/welcome映射到GreenController.welcome()green/{treeId}/{treeName}要映射到GreenController.viewTree(treeId, treeName).

我想我需要指定两个@RequestMapping@RequestMapping/green/basic/welcome首先被处理,因此它不会解释为一个呼叫GreenControllerviewTree("basic", "welcome").

你能指导我吗?

yin*_*ash 8

a的精确匹配RequestMapping优先于a的精确匹配PathVariable.所以你会有两个请求映射,就像你指出的那样.一个用于处理特定URL,变量版本将捕获其他所有内容.Spring在检查路径变量匹配之前检查直接路径匹配,因此顺序无关紧要,除非您有两个具有相同数量的路径变量的请求映射,这可能会吐出一个IllegalStateException

检查详细信息的来源org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.它是在处理lookupHandlerMethod().

要确定两个RequestMapping不完全匹配的s 的最佳匹配,请使用compareTo()方法RequestMappingInfo.

  • 一个方便的实现细节知道.是否有任何公共文档(除了源代码)为api定义此行为? (2认同)