2014-01-14 80 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

很高興看到它! –

相關問題