Grails URL映射优先规则

Grails URL映射优先规则,grails,url-routing,Grails,Url Routing,使用Grails实现以下URL映射 '/api/abcdef' (resources: 'abcDef') '/api/abc' (resources: 'abc') 调用/api/abcdef调用AbcController.index(),使用格式参数def,而不是AbcDefController。但是,调用/api/abcdef/1已正确解析为AbcDefController.show()。这看起来像是grailsrilmappingreport将要报告的bug | GET |

使用Grails实现以下URL映射

'/api/abcdef' (resources: 'abcDef')
'/api/abc' (resources: 'abc')
调用
/api/abcdef
调用
AbcController.index()
,使用
格式
参数
def
,而不是
AbcDefController
。但是,调用
/api/abcdef/1
已正确解析为
AbcDefController.show()
。这看起来像是
grailsrilmappingreport
将要报告的bug

|   GET    | /api/abcdef                                      | Action: index    |
位于
AbcDefController

但是,如果将两个URL的顺序更改为

'/api/abc' (resources: 'abc')
'/api/abcdef' (resources: 'abcDef')
Grails将正确地将
/api/abcdef
解析为
AbcDefController.index()

但在任何一种情况下,
/api/abc123
都将解析为
AbcController.index()
,参数为
123

URL映射的优先级机制是什么?上述行为正确吗?我支持Groovy 2.4.5和Grails 2.5.3

[W] 当两个映射可以应用于同一个传入URI时 wins具有以下功能:

  • 更少的双通配符(**或$var**),或者如果两者相等,则
  • 更少的单个通配符(*或$var),或者如果两者相等,则
  • 更多非通配符路径段,或者如果两者相等,则
  • 最左边的通配符(/foo//baz beats/foo/bar/),或者如果两者的最左边通配符位于同一位置,则
  • 有更多约束的那个

  • 来源:

    你找到这个问题的答案了吗?如果是这样,我希望你能把它贴在这里。谢谢。我以前看过这篇文章。但是仍然无法理解为什么
    /api/abc123
    会被映射到
    AbcController
    ,以及
    /api/abc
    /api/abcdef
    的顺序有什么关系