Задать вопрос

Как с помощью play framework ws отправить get запрос без выполнения url encode?

Всем привет! Сейчас занимаюсь интеграцией нашего проекта на Play 2.3.8 и гис.

С гис общение происходит с помощью get запросов.

Вот правильный пример запроса для получения объекта:

http://myGisServer.ru/myservice?token=XYZ%3D&query=[{"id":"123","objectIds":["5"]}]


Где token это токен полученый при авторизации и над которым производится url encode.
А query соответственно запрос в виде json

Я попробовал реализовать это вот так:
def getPoint = Action.async{
  val data = Json.obj(
      "id" -> "123",
      "objectIds" -> Json.arr("5")
  )
  val ws = WS.url("http://myGisServer.ru/myservice").withQueryString(
    "token" -> currentToken,
    "query" -> data.toString()
  )
  val futureResponse: Future[WSResponse] = ws.get()
  futureResponse.map(response => {
    Ok(response.json)
  })
}


Но, это не работает, потому что ws автоматически производит url encode над всем запросом, а над частью json, encode производить не надо.
Сформировать строчку, и просто скормить её ws в качестве url тоже не работает, потому что ws не умеет принимать в url некоторые символы, в том числе пробелы и квадратные скобки.

Как можно убрать encode из части запроса, или же создать запрос вообще без encode?
  • Вопрос задан
  • 507 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
mrRontgen
@mrRontgen
Scala lover.
Через play WS походу никак. Он использует com.ning.http.client.RequestBuilderBase и вот в этом методе енкодит запрос.
Попробуйте заимлементить свой RequestBuilder ), который не будет энкодить.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы