#scala #web-services #playframework #playframework-2.0
#scala #веб-сервисы #playframework #playframework-2.0
Вопрос:
В настоящее время я отправляю запросы get через Play WS API следующим образом:
wsClient
.url(myUrl)
.withQueryString(getParams(): _*)
.get()
Теперь я хочу изменить этот вызов, чтобы использовать HTTP Post. При вызове следующего:
wsClient
.url(myUrl)
.withMethod("POST")
.withBody(getParams(): _*)
.get()
Я получаю следующую ошибку:
Не удается записать экземпляр Seq[(String, String)] в HTTP-ответ. Попробуйте определить доступный для записи [Seq[(Строка, строка)]]
Я думаю, это потому, что метод getParams
возвращает Seq[(String, String)]
.
Как я могу это исправить?
Комментарии:
1. Вы должны завершить свой вызов
.post()
… Смотрите Документы .2. Спасибо за ваш ответ. Я
get()
заменилpost(getParams(): _*)
и удалил.withBody(getParams(): _*)
, но все равно получаю ту же ошибку.3. Также
.withBody(getParams(): _*)
неверно.. Что вы отправляете как тело , какой-нибудь JSON, XML? Строка запроса — это просто параметры URL, например?id=5amp;name=whatever
.4. Полезная нагрузка для POST-запроса должна быть примерно такой
key123=val123amp;key456=val456
.getParams
Seq[(String, String)]
Например, мой метод возвращает aList("key123" -> "val123", "key456" -> "val456")
.
Ответ №1:
При использовании http post пары значений ключа отправляются с использованием типа содержимого application/x-www-form-urlencoded
Вот код для публикации
client.url(myUrl)
.withHeaders("Content-type" -> "application/x-www-form-urlencoded")
.post(getParams.map { case (k, v) => s"$k=$v"}.mkString("amp;"))
Комментарии:
1. Отлично! Большое вам спасибо! Хорошего дня.