2016-03-02 74 views
2

采取使用GrailsGrails的URL映射优先级规则

'/api/abcdef' (resources: 'abcDef') 
'/api/abc' (resources: 'abc') 

以下URL映射到/api/abcdef调用调用AbcController.index()def一个format参数,而不是AbcDefController。但是,致电/api/abcdef/1正确解析为AbcDefController.show()。这看起来像作为grails url-mapping-report错误将报告

| GET | /api/abcdef          | Action: index | 

AbcDefController下。

但是,如果改变这两个网址来

'/api/abc' (resources: 'abc') 
'/api/abcdef' (resources: 'abcDef') 

Grails的顺序将正确解析/api/abcdefAbcDefController.index()

但在这两种情况下/api/abc123将解析为AbcController.index()format参数123

什么是URL映射的优先级机制?上述行为是否正确?我使用Groovy 2.4.5和Grails 2.5.3。

+0

你找到这个问题的答案?如果是这样,如果你可以在这里发布,我很乐意。谢谢。 – 10GritSandpaper

回答

0

[W]母鸡两个映射可以适用于相同的输入的URI,则一个 胜是具有一个:

  1. 更少双通配符(**或$变种**),或者,如果两者相等然后
  2. 更少单通配符(*或$变种),或者如果两者相等然后
  3. 更多非通配符路径段,或者如果两者相等,则
  4. 最远的左通配符(/ foo//baz beats/f OO /酒吧/),或者两者都有各自最左边的通配符在同一个地方,然后
  5. 的一个具有更多约束

来源:https://stackoverflow.com/a/12214694/715608

+0

我以前看过这篇文章。但是仍然无法确定为什么'/ api/abc123'会映射到'AbcController',并且按照什么规则,'/ api/abc'和'/ api/abcdef'的顺序 – hanaZ