2012-03-21 9 views
38

HTTPメソッドに関係なく、すべてのリクエストパラメータにアクセスする方法はありますか?私は、Play Framework 2.0で方法を見つけ出すことなく、ドキュメンテーションとAPIを書きました。Request.paramsはPlay Framework 2.0に含まれていません

私は、POSTとGETを受け付けるサイトで検索しています。サイト上のカスタムトラッキングは、トラッキングデータを格納する正しい方法を決定するために渡されたすべてのパラメータを調べます。プレイFrameworkの1.2.xので

、私はプレイフレームワーク2.0では

request.params.get("keywords") 
request.params.get("location") 
request.params.all() 

とコントローラでリクエストからパラメータにアクセスすることができました、これはもはやケースです。 Requestはメソッドparamsを持たず、queryStringのみで、queryStringはPOSTではなくGETでのみ動作します。

可能なすべてのトラッキングパラメータをコントローラアクションに定義することは現実的ではありません。


UPDATE:周りの可能な作業はBody Parsersを使用しています。

要求のコンテンツタイプに応じて、適切なパーサーが使用されます。 アプリケーション/フォームURLエンコードVSアプリケーション/ JSON

これは、POSTパラメータを組み合わせて、GETパラメータが優先して用いて、パラメータをGET粗マップです。

val params: collection.mutable.Map[String, Seq[String]] = collection.mutable.Map() 
params ++= request.body.asFormUrlEncoded.getOrElse[Map[String, Seq[String]]] { Map.empty } 
params ++= request.queryString 
+1

アクション(parse.fooContentType){...}は、Bodyパーサーリンクのおかげで非常に役に立ちました! – virtualeyes

+1

あなたの回答は、元の質問の編集ではなく、回答として分割する必要があります。 –

+2

私は今すぐ働いている原油修正の代わりにAPIによってサポートされた適切な答えを期待していました – mguymon

答えて

9

Play 2.0のドキュメントではこれについては説明していません。ボディパーザーは許容される解決策ですが、私はDynamicFormがはるかに軽量でユーザーフレンドリーであることを発見しました。

ドキュメントはhereです。

特に、古いPlay 1.0 request.params.get()を交換しようとすると、DynamicForm.bindFromRequest()が開始するのに適しています。

+0

2.1.0(おそらく2.0も)私はform()。bindFromRequest()。get( "param_key")を使って個々のリクエストを取得します。 。 – fabspro

+2

@fabsproここで、form()メソッドはどのクラスまたはパッケージでインポートする必要がありますか? – zjffdu

+3

@zjffdu form()メソッドをplay.data.Form.form()に移動し、Form.form()として使用する必要があります。 https://github.com/playframework/Play20/blob/master/documentation/manual/Migration.md#playmvccontrollerform-renamed-to-playdataformform –

4
ctx()._requestHeader().getQueryString("q").get(); 

これは余分なインポートを必要とせず、ブートストラップされたコントローラからまっすぐに動作するはずです。

関連する問題