5

たとえば、Web アプリに API があり、残りの Web アプリと同じコントローラーとアクションを API で使用したいとします。

私のurlmappingsファイルには

"/api/$version/$apiKey/$controller/$acion/$id?"

また、次のようなマッピングもあります。

"/blog/$year/$month/$day/$action" {
   controller = 'blog'
 }

ここで問題は、$year、$month、$day 変数の恩恵を受けることができるように、どうにかして API urlmapping を blog urlmapping の前に付けることはできますか? 次の URL への GET リクエストが有効になるようにします。

GET /api/0.1/bs23mk4m2n4k/blog/2001/01/05/list

または、代わりに次のリクエストを行う必要がありますか?

GET /api/0.1/bs23mk4m2n4k/blog/list?year=2004&month=01&day=05

urlmappings GURU または groovy ランタイム urlmappings maniuplation WIZARD の助けが必要です :)

APIパスを接頭辞として再宣言するのではなく、既存の非API urmappingsを再利用できるソリューションが必要です。

4

3 に答える 3

3

ApiController で API パラメータを取り除いてから、ブログ コントローラにリダイレクトすることができます。例えば:

"/api/$version/$apiKey/$rest**" {
     controller:'api'
     action:'default'
}


import org.codehaus.groovy.grails.web.util.WebUtils
class ApiController {
    def grailsUrlMappingsHolder

    def default = {
        // validate apiKey, etc
        WebUtils.forwardRequestForUrlMappingInfo(request, response, grailsUrlMappingsHolder.match("/${params.rest}"))
    }
}

API コントローラーは、バージョンと apiKey のパラメーターにアクセスし、ブログ コントローラーの UrlMapping によって処理される残りのパラメーターを渡します。

于 2011-05-12T18:34:56.007 に答える
0

埋め込み変数を使用したいと思います。URL マッピング リファレンスを確認してください: http://grails.org/doc/latest/guide/single.html#6.4 URL マッピング

次のマッピングを追加するだけです。

static mappings = {
   "/api/$version/$apiKey/$controller/$year/$month/$day/$action"()
} 

たとえば、次の URL を使用できます。

http://localhost:8080/api/0.1/bs23mk4m2n4k/blog/2001/01/05/list

これで、ブログ コントローラーのリスト アクションにリダイレクトされます。そこで、params を使用して、(マッピングで定義されているように) URL からパラメーターを表示できます。

元。

params.version
于 2011-05-12T15:18:52.353 に答える
-1

私は多少同じ問題を抱えていましたが、名前付きURLマッピングを使用して解決しました:

お役に立てれば!

urlMapping で:

name blogWithYear:"/api/$version/$apiKey/$controller/$year/$month/$day":{
controller = 'blog'
action = 'youraction'
}

<g:link mapping="blogWithYear" params="[$version:'0.1', ....., '$year: 2011']">
Show blog
</g:link>

g:link を使用すると、パラメーターを追加して、必要に応じて URL をコンパイルできるようになりました。

于 2011-05-12T12:30:35.363 に答える