2014-01-14 77 views
2

我正在开发一个在scala中使用Play框架的应用程序。我必须在我的应用程序中处理下面的用例。播放框架将播放服务器的http请求发送到“somesite.com”,并将响应发送回浏览器

对于从浏览器到播放服务器的特定请求,Play服务器应向某个外部服务器(例如:somesite.com)发出http请求,并将该请求的响应发送回Web浏览器。

我写下面的代码发送请求到控制器中的外部serever。

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) 
    } 
} 

要注意的关键是在Future的习惯用法的map()那你从get回调 - 这个代码map块内将再次对Future执行已成功完成。

Action.async“包装”讲述了游戏的框架,你会返回一个Future[Response]和要做必要等待事情的发生,如Handling Asynchronous Results documentation解释。

2

您还可能有兴趣在动态恢复的状态和内容类型:如果URL /服务调用未能正确回答

def showSomeSiteContent = Action.async { 
    WS.url("http://somesite.com").get().map { response => 
    Status(response.status)(response.body).as(response.ahcResponse.getContentType) 
    } 
} 
  • 动态状态可能会有所帮助。
  • 如果您的URL /服务可以返回不同的内容HTML/XML ...,取决于某些动态参数,动态内容类型可能非常方便。
+0

谢谢帕特里克。这有帮助。 – Bourne

+0

很高兴看到它! –

相关问题