【问题标题】:How to get all request parameters in Play and Scala如何在 Play 和 Scala 中获取所有请求参数
【发布时间】:2012-11-13 04:05:35
【问题描述】:
 case GET(Path("/rtb_v1/bidrequest")) => Action {  implicit request =>

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

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

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

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

【问题讨论】:

    标签: scala playframework


    【解决方案1】:

    Play 等效于 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.

    【讨论】:

    • 工作.. 我喜欢这段代码,它比平面图解决方案更具表现力
    • 您现在可以将 queryString 分配给另一个请求吗?如何分配?
    • 哇.. 我是 scala 的新手,您介意解释一下您的 map case 是如何返回 map[string, string] 的吗?
    【解决方案2】:

    作为 Kim 的替代方法,我个人使用类似..的函数。

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-06-25
          • 1970-01-01
          • 2023-03-19
          • 2014-09-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多