web-dev-qa-db-ja.com

Request.paramsはPlayFramework2.0でなくなりました

HTTPメソッドに関係なく、すべてのリクエストパラメータにアクセスする方法はありますか? Play Framework 2.0で方法を見つけることなく、ドキュメントとAPIに注力しました。

POSTおよびGETを受け入れるサイトを検索しています。サイトのカスタムトラッキングは、渡されたすべてのパラメーターを調べて、トラッキングデータを保存する正しい方法を決定します。

Play Framework 1.2.xでは、コントローラーのリクエストからパラメーターにアクセスできました。

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

Play Framework 2.0では、これはもはや当てはまりません。 Request メソッドparamsはなくなり、queryStringとqueryStringのみがGETでのみ機能し、POSTでは機能しなくなりました。

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


[〜#〜] update [〜#〜]:考えられる回避策は Body Parsers を使用することです。

リクエストのコンテンツタイプに応じて、適切なパーサーが使用されます。 application/form-url-encodedvsapplication/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 
38
mguymon

Play 2.0のドキュメントでは、これについて十分に説明されていません。ボディパーサーは許容できるソリューションですが、DynamicFormの方がはるかに軽量でユーザーフレンドリーであることがわかりました。

ドキュメントは見つけることができます ここ

特に、DynamicForm.bindFromRequest()は、古いPlay 1.0 request.params.get()を置き換えようとしている場合に開始するのに適した場所です。

9
44maagnum
ctx()._requestHeader().getQueryString("q").get();

これは追加のインポートを必要とせず、ブートストラップされたコントローラーから直接機能するはずです。

4
Ilya