Question Comment obtenir tous les paramètres de demande dans Play et Scala


 case GET(Path("/rtb_v1/bidrequest")) => Action {  implicit request =>

Je veux prendre l'objet requête ci-dessus et obtenir toutes les paires clé / valeur envoyées dans le formulaire et l'aplatir dans une map [String, String]

J'ai parcouru tous les documents et je suis dans une impasse.

C'est assez facile à comprendre dans Java / Servlets Je me demande pourquoi il n'y a pas de documentation sur une chose aussi simple que celle-ci.

Map<String, String[]> parameters = request.getParameterMap();

13
2017-11-13 04:05


origine


Réponses:


Jouer l'équivalent de request.getParamterMap est request.queryString, qui renvoie un Map[String, Seq[String]]. Vous pouvez l'aplatir à un Map[String, String] avec

request.queryString.map { case (k,v) => k -> v.mkString }

Et voici la documentation.


25
2017-11-13 05:32



En tant qu'alternative à la façon dont Kim le fait, j'utilise personnellement une fonction comme ..

def param(field: String): Option[String] = 
  request.queryString.get(field).flatMap(_.headOption)

9
2017-11-13 05:46



Cela ne fonctionnera pas si la requête utilise la méthode POST. Le code suivant peut être utilisé:

req.body match {
  case AnyContentAsFormUrlEncoded(params) ⇒
    println(s"urlEncoded = $params")
  case mp @ AnyContentAsMultipartFormData(_) ⇒
    println(s"multipart = ${mp.asFormUrlEncoded}")
}

1
2017-07-04 15:42



Vous devrez peut-être utiliser les éléments suivants:

request.queryString.map { case (k,v) => k -> v.mkString }).toSeq: _*

0
2018-03-17 16:03