38 votes

Request.params est parti dans Play Framework 2.0

Est-il un moyen d'accéder à tous les paramètres de la demande, indépendamment de la méthode HTTP? J'ai versé sur de la documentation et de l'api sans trouver un moyen de Jouer Framework 2.0.

J'ai une recherche sur un site qui accepte les POST et GET. Le suivi personnalisé sur le site examine tous les paramètres passés à déterminer la bonne façon de stocker les données de suivi.

Dans le Jeu Framework 1.2.x, j'ai été en mesure d'accéder à des paramètres d'une requête dans un Contrôleur avec

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

Avec Play Framework 2.0, ce n'est plus le cas. La Demande n'a plus la méthode de params, seulement queryString et queryString ne fonctionne qu'avec les OBTENIR et de ne pas POSTER.

Il n'est pas possible de définir tous les possibles de suivi paramètre dans le Contrôleur de l'Action, ils sont dynamiques.


Mise à JOUR: UNE manière de contourner ce problème est d'utiliser le Corps des Analyseurs.

Selon le type de contenu de la demande, l'analyseur est utilisé, par exemple, de l'application/formulaire-url-encodé vs application/json

C'est le brut Carte qui combine des paramètres POST et OBTENIR les paramètres, avec des paramètres prioritaires.

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 

9voto

44maagnum Points 416

La documentation de Play 2.0 ne l'explique pas très bien. Les analyseurs de corps sont une solution acceptable, mais j'ai trouvé DynamicForm beaucoup plus léger et convivial.

La documentation peut être trouvée ici .

En particulier, les DynamicForm.bindFromRequest() sont un bon point de départ si vous essayez de remplacer l'ancien jeu 1.0 request.params.get() .

4voto

Ilya Points 53
 ctx()._requestHeader().getQueryString("q").get();
 

cela ne nécessite aucune importation supplémentaire et devrait fonctionner directement du contrôleur bootstrapped.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X