2014-01-14 3 views
2

Я разрабатываю приложение, используя платформу Play в scala. Я должен обработать нижеследующий вариант использования в своем приложении.Play framework сделать http-запрос с игрового сервера на «somesite.com» и отправить ответ обратно в браузер

Для конкретного запроса от браузера к игровому серверу сервер воспроизведения должен сделать HTTP-запрос на какой-либо внешний сервер (например, somesite.com) и отправить ответ от этого запроса обратно в веб-браузер.

Я написал код, указанный ниже, чтобы отправить запрос на внешний источник в контроллере.

val holder = WS.url("http://somesite.com") 
val futureResponse = holder.get 

Теперь как отправить ответ, полученный с «somesite.com» обратно в браузер?

ответ

4

Приводится пример в Play documentation for WS, под Использование в контроллере; Я приспособил его к вашему сценарию:

def showSomeSiteContent = Action.async { 
    WS.url("http://somesite.com").get().map { response => 
    Ok(response.body) 
    } 
} 

Главное, чтобы отметить это идиоматическое использование map() на Future, что вы получите обратно от get вызова - код внутри этого блока map будет выполняться один раз в Future успешно завершена.

Action.async «обертка» говорит рамки Play, что вы будете возвращающую Future[Response] и что вы хотите это сделать необходимые ждет вещи, чтобы это произошло, как объяснено в Handling Asynchronous Results documentation.

2

Вы также можете быть заинтересованы в динамически возвращая статус и тип содержимого:

def showSomeSiteContent = Action.async { 
    WS.url("http://somesite.com").get().map { response => 
    Status(response.status)(response.body).as(response.ahcResponse.getContentType) 
    } 
} 
  • Динамический статус может помочь, если URL/услуге вы звоните не в состоянии правильно ответить.
  • Динамический тип содержимого может быть полезен, если ваш URL/служба может возвращать разные контенты HTML/XML ... в зависимости от какого-либо динамического параметра.
+0

Спасибо, Патрик. Это помогло. – Bourne

+0

Рад прочитать его! –

 Смежные вопросы

  • Нет связанных вопросов^_^