2012-10-23 151 views
4

我有時會遇到一種情況,我正在嘗試設置URLMappings這樣:的Grails:設置URL映射優先

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

然後,當我訪問/static/image/13它通常會擊中/**代替

/static/*/*
的怎麼辦我告訴Spring/Grails寧願先嚐試匹配另一個?

+0

在Grails的它_should_總是喜歡'/靜態/ */*''以上/ **'與少''**通配符映射被視爲是更高的優先級。 –

回答

1

原來,Grails將來自更具體到最不具體,只要:

  1. 您沒有語法錯誤在你URLMappings和
  2. 有時你需要重新啓動它的Grails正確生效。

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

URL映射按照它們聲明的順序被命中,因此請將所有的 /**都記錄下來。

編輯:這個答案在我的腦海裏迴盪,我在郵件列表中回想起something I read。回到Grails1.1左右,URLMappings按聲明的順序進行評估。但是,現在,URLMapping匹配稍微複雜一些。 URLMappings會嘗試通過比較通配符,靜態令牌和約束的數量來返回最佳匹配。你可以看到這in the source

由於URL映射順序不再重要,它必須是別的東西(儘管我發現按粗略順序列出它們使得它們更易於閱讀)。它看起來像第二個片段實際上應該是一個靜態令牌。我會嘗試/static/image/$imageNumber

+0

明天我會試試看第一件事!謝謝! – Spider