Scala Play 框架 POST 请求使用请求正文
Scala Play framework POST request using request body
我正在尝试创建一个 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
}
您可以拉出 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"
注意:如果您知道查询字符串键是什么(并想限制它们),您可以将它们显式传递给操作 within the routes file。
我正在尝试创建一个 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
}
您可以拉出 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"
注意:如果您知道查询字符串键是什么(并想限制它们),您可以将它们显式传递给操作 within the routes file。