4

我有时会遇到这样一种情况,即我尝试将 URLMappings 设置为:

    /** -> 内容控制器
    /static/$image/$imageNumber -> ResourcesController

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

/静止的/*/*
我如何告诉 Spring / Grails 宁愿先尝试匹配另一个?

4

2 回答 2

3

URL 映射按照它们声明的顺序被命中,所以把你的捕获全部放在/**最后。

编辑:这个答案在我的脑海里搔痒,我想起了我在邮件列表上读到的一些东西。回到 Grails 1.1 左右,URLMappings 是按照声明的顺序进行评估的。然而,现在,URLMapping 匹配稍微复杂一些。URLMappings 将通过比较通配符的数量、静态标记以及最后的约束数量来尝试返回最佳匹配。您可以在源代码中看到这一点。

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

于 2012-10-23T18:49:27.560 回答
1

事实证明,只要满足以下条件,Grails 就会从更具体到最不具体:

  1. 您的 URLMappings 中没有语法错误,并且
  2. 有时您需要重新启动 grails 才能使其正确生效。

    "/other-test/$testname" { // Fired for "/other-test/hi-there/"
        controller="test"
    }
    
    "/**" { // fired for "/something-else"
        controller="test"
    }
    
于 2012-11-21T10:45:37.510 回答