如何在Play和Scala中获取所有请求参数

时间:2012-11-13 04:05:35

标签: scala playframework

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

我想获取上面的请求对象并获取表单中发送的所有键/值对并将其展平为Map [String,String]

我已经阅读了所有文件并且处于死胡同。

这在Java / Servlets中非常简单;我想知道为什么没有关于这样的简单事情的文档......

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

4 个答案:

答案 0 :(得分:26)

等同于request.getParamterMap的游戏是request.queryString,返回Map[String, Seq[String]]。您可以使用

将其展平为Map[String, String]
request.queryString.map { case (k,v) => k -> v.mkString }

And here is the documentation.

答案 1 :(得分:9)

作为Kim的方式的替代方案,我个人使用像...这样的函数。

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

答案 2 :(得分:1)

如果请求使用POST方法,它将无法工作。可以使用以下代码:

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

答案 3 :(得分:0)

您可能必须使用以下内容:

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