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

时间:2018-10-08 23:15:46

标签: scala post playframework xmlhttprequest

我正在尝试创建一个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
}

1 个答案:

答案 0 :(得分:0)

您可以拉出query string as a 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"

注意:如果您知道查询字符串键是什么(并希望限制它们),则可以将它们显式传递给Action within the routes file