使用请求主体的Scala Play框架POST请求

D.公园

我正在尝试创建一个POST端点,该端点使用Web服务使用请求主体中的数据作为参数来进行外部API调用。例如,假设从我的客户端,我用主体向服务器发出POST请求:

{
  "one": 1,
  "two": 2,
  "three": 3
}

我希望后端发出外部http请求,例如:

GET "http://api_url?one=1&two=2&three=3"

我是一名JS程序员,并且是Scala和Play框架的新手,似乎无法弄清楚如何访问正文并将其映射到url中。这是我到目前为止所拥有的...

def getAll = Action { request =>
  val url = "http://api_url?"
  val body = request.body

  body.map { param =>
    url += param.key + "=" + param.value + "&"
  }

  ws.url(url).post
}
安迪·海登(Andy Hayden)

您可以将查询字符串作为Map[String, Seq[String]]拉出,可以使用以下方法将其展平为Map[String, String]

val m = request.queryString.map { case (k, v) => (k, v.head) }

然后,您可以遍历Map(就像您一样,或使用.map):

@ m.map { case (k, v) => k + "=" + v }
res3: collection.immutable.Iterable[String] = List("a=1", "c=3")

@ m.map { case (k, v) => k + "=" + v }.mkString("&")
res4: String = "a=1&c=3"

注意:如果您知道查询字符串键是什么(并希望对其进行限制),则可以将它们显式传递给routes文件中的Action

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章