Grails:设置URL映射优先级

时间:2012-10-23 18:48:02

标签: spring grails url-mapping

我有时会遇到一种情况,我正在尝试设置URLMappings:

    /** -> ContentController
    /static/$image/$imageNumber -> ResourcesController

然后,当我访问/static/image/13时,它会经常点击/**而不是

/static/*/*
如何告诉Spring / Grails先尝试匹配另一个?

2 个答案:

答案 0 :(得分:3)

URL映射按照声明的顺序命中,因此最后将所有/**保留。

编辑:这个答案在我脑海中浮现,我回忆起邮件列表上的something I read。回到Grails 1.1左右,URLMappings按声明的顺序进行评估。但是,现在,URLMapping匹配稍微复杂一些。 URLMappings将尝试通过比较通配符,静态标记的数量以及最终的约束数来返回最佳匹配。您可以看到此in the source

由于URL映射顺序不再重要,因此它必须是其他内容(尽管我发现按粗略顺序列出它们使得更容易阅读它们)。看起来第二个片段实际上应该是静态令牌。我试试/static/image/$imageNumber

答案 1 :(得分:1)

事实证明,Grails将从更具体到最不具体,只要:

  1. 您的URLMappings和
  2. 中没有语法错误
  3. 有时您需要重新启动grails才能正常生效。

    "/other-test/$testname" { // Fired for "/other-test/hi-there/"
        controller="test"
    }
    
    "/**" { // fired for "/something-else"
        controller="test"
    }