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マッピングの順序は重要ではなくなったので、それは別のものでなければなりません(ただし、大まかな順序でリストすると読みやすくなります)。2番目のフラグメントは実際には静的トークンである必要があるようです。やってみ/static/image/$imageNumber
ます。
Grails は、次の条件を満たしている限り、より具体的なものから最も具体的でないものへと変化します。
正しく有効にするために grails を再起動する必要がある場合があります。
"/other-test/$testname" { // Fired for "/other-test/hi-there/"
controller="test"
}
"/**" { // fired for "/something-else"
controller="test"
}