Scala Play рамки POST-запроса с использованием тела запроса - PullRequest
0 голосов
/ 09 октября 2018

Я пытаюсь создать конечную точку POST, которая использует веб-службы для выполнения внешнего вызова 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 голосов
/ 09 октября 2018

Вы можете вывести строку запроса в виде 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"

Примечание. Если вы знаете, какими будут ключи строки запроса (и хотите их ограничить), вы можете передатьих явно для действия в файле маршрутов .

...