2016-10-18 5 views
1

В настоящее время я посылающие запросы GET через Play WS API следующим образом:Отправить запрос POST с параметрами в теле через Play WS API

wsClient 
    .url(myUrl) 
    .withQueryString(getParams(): _*) 
    .get() 

Теперь я хочу, чтобы изменить этот вызов, чтобы использовать HTTP Post. При звонке в следующем:

wsClient 
     .url(myUrl) 
     .withMethod("POST") 
     .withBody(getParams(): _*) 
     .get() 

Я получаю следующее сообщение об ошибке:

Cannot write an instance of Seq[(String, String)] to HTTP response. Try to define a Writeable[Seq[(String, String)]]

Я думаю, это потому, что метод возвращает getParamsSeq[(String, String)].

Как это исправить?

+0

Вы должны закончить вызов с '.post()' ... Смотрите [документы] (https://www.playframework.com/documentation/2.5.x/ScalaWS#Request-with-additional-headers). –

+0

Благодарим за отзыв. Я заменил 'get()' на 'post (getParams(): _ *)' и удалил '.withBody (getParams(): _ *)', но я все равно получаю ту же ошибку. –

+0

Также '.withBody (getParams(): _ *)' неправильно. Что вы отправляете как ** body **, некоторые JSON, XML? Строка запроса - это только параметры URL, такие как '? Id = 5 & name = whatever'. –

ответ

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("&")) 
+0

Отлично! Спасибо огромное! Хорошего дня. –