【问题标题】:Grails URL Mapping Precedence RulesGrails URL 映射优先规则
【发布时间】:2016-03-02 03:57:08
【问题描述】:

使用 Grails 进行以下 URL 映射

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

/api/abcdef 的调用使用format 参数def 而不是AbcDefController 调用AbcController.index()。但是调用/api/abcdef/1 正确解析为AbcDefController.show()。这看起来像 grails url-mapping-report 会报告的错误

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

属于AbcDefController

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

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

Grails 会正确地将 /api/abcdef 解析为 AbcDefController.index()

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

URL映射优先级的机制是什么?以上行为对吗?我使用 Groovy 2.4.5 和 Grails 2.5.3。

【问题讨论】:

  • 您找到这个问题的答案了吗?如果是这样,我很高兴你能把它贴在这里。谢谢。

标签: grails url-routing


【解决方案1】:

[W]当两个映射可以应用于同一个传入 URI 时,那个 wins 是具有:

  1. 更少的双通配符(** 或 $var**),或者如果两者相等则
  2. 更少的单个通配符(* 或 $var),或者如果两者相等则
  3. 更多非通配符路径段,或者如果两者相等则
  4. 最左边的通配符 (/foo//baz beats /foo/bar/),或者如果它们最左边的通配符在同一个位置,那么
  5. 约束较多的一种

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

【讨论】:

  • 我以前看过这个帖子。但仍然无法弄清楚为什么/api/abc123 会被映射到AbcController 以及/api/abc/api/abcdef 的顺序的规则是什么
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
  • 2016-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多