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

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

我已经浏览了所有文件,但我陷入了死胡同。

这在 Java/Servlets 中非常简单;我想知道为什么在任何地方都没有像这样简单的东西的文档..

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

4 回答 4

27

Play 等效于request.getParamterMapis request.queryString,它返回 a Map[String, Seq[String]]。您可以将其展平Map[String, String]

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

这是文档。

于 2012-11-13T05:32:25.573 回答
9

作为 Kim 的替代方法,我个人使用了一个函数,例如..

def param(field: String): Option[String] = 
  request.queryString.get(field).flatMap(_.headOption)
于 2012-11-13T05:46:25.277 回答
2

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

req.body match {
  case AnyContentAsFormUrlEncoded(params) ⇒
    println(s"urlEncoded = $params")
  case mp @ AnyContentAsMultipartFormData(_) ⇒
    println(s"multipart = ${mp.asFormUrlEncoded}")
}
于 2014-07-04T15:42:55.840 回答
0

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

request.queryString.map { case (k,v) => k -> v.mkString }).toSeq: _*
于 2015-03-17T16:03:41.630 回答