我有时会遇到这样一种情况,即我尝试将 URLMappings 设置为:
/** -> 内容控制器 /static/$image/$imageNumber -> ResourcesController
然后当我访问/static/image/13
它时,它经常会点击/**
而不是
/静止的/*/*我如何告诉 Spring / Grails 宁愿先尝试匹配另一个?
我有时会遇到这样一种情况,即我尝试将 URLMappings 设置为:
/** -> 内容控制器 /static/$image/$imageNumber -> ResourcesController
然后当我访问/static/image/13
它时,它经常会点击/**
而不是
/静止的/*/*我如何告诉 Spring / Grails 宁愿先尝试匹配另一个?
URL 映射按照它们声明的顺序被命中,所以把你的捕获全部放在/**
最后。
编辑:这个答案在我的脑海里搔痒,我想起了我在邮件列表上读到的一些东西。回到 Grails 1.1 左右,URLMappings 是按照声明的顺序进行评估的。然而,现在,URLMapping 匹配稍微复杂一些。URLMappings 将通过比较通配符的数量、静态标记以及最后的约束数量来尝试返回最佳匹配。您可以在源代码中看到这一点。
由于 URL 映射顺序不再重要,它必须是别的东西(尽管我发现按粗略的顺序列出它们更容易阅读它们)。看起来第二个片段实际上应该是一个静态令牌。我会试试/static/image/$imageNumber
的。
事实证明,只要满足以下条件,Grails 就会从更具体到最不具体:
有时您需要重新启动 grails 才能使其正确生效。
"/other-test/$testname" { // Fired for "/other-test/hi-there/"
controller="test"
}
"/**" { // fired for "/something-else"
controller="test"
}