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