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
Play 2.0のドキュメントでは、これについて十分に説明されていません。ボディパーサーは許容できるソリューションですが、DynamicForm
の方がはるかに軽量でユーザーフレンドリーであることがわかりました。
ドキュメントは見つけることができます ここ 。
特に、DynamicForm.bindFromRequest()
は、古いPlay 1.0 request.params.get()
を置き換えようとしている場合に開始するのに適した場所です。
ctx()._requestHeader().getQueryString("q").get();
これは追加のインポートを必要とせず、ブートストラップされたコントローラーから直接機能するはずです。