我正在使用带注释的 Controller 进行Spring MVC项目。
我感兴趣的一件事是处理@RequestMapping
指令的顺序。
例如,我希望所有/green/basic/welcome
都映射到GreenController.welcome()
但是green/{treeId}/{treeName}
要映射到GreenController.viewTree(treeId, treeName)
。
我想我需要先指定两个@RequestMapping
与@RequestMapping
的/green/basic/welcome
一起处理,这样它才不会被解释为对GreenControllerviewTree("basic", "welcome")
的调用。
你们可以在这方面指导我吗?
最佳答案
与RequestMapping
的完全匹配将优先于PathVariable
的匹配。因此,您将像您指出的那样有两个请求映射。一个用于处理特定的URL,变量版本将捕获其他所有内容。 Spring在检查路径变量匹配之前先检查直接路径匹配,因此顺序无关紧要,除非您有两个具有相同数量路径变量的请求映射,这可能会吐出IllegalStateException
检查source of org.springframework.web.servlet.handler.AbstractHandlerMethodMapping
的详细信息。它在lookupHandlerMethod()
中处理。
要确定两个不完全匹配的RequestMapping
的最佳匹配,请使用 RequestMappingInfo
的compareTo()方法。
关于spring-mvc - Spring MVC中的有序RequestMapping,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2326912/