2013-11-21 50 views
1

我正在編寫一個play應用程序,它應該調用另一個web服務並逐字返回其結果 - 相同的響應代碼,相同的標頭,相同的主體。但是看起來Controller的編寫方式使我必須指定一個明確的返回碼。我嘗試過獲得ahcResponse,但似乎沒有提供明顯的解決方案。從Play!2 WS調用(在Scala中)返回未翻譯的結果

這是我現在有:

def route(name: String, command: String) = Action { 

    Async { 
    (
     WS.url("someurl").get().map { 
     (
      response => Ok(response.body)) 
     }) 
    } 
} 

然而,這總是返回「OK」狀態,如果它得到一個錯誤,它會拉動錯誤HTML進入人體爲文本。

如何將WS回調的結果轉發給我的調用者?

回答

2

你可以轉發通過以下方式響應代碼和身體:

WS.url(url) 
    .get 
    .map(response => 
    response.status match { 
     // in case you want to do something special for ok 
     // otherwise, pattern matching is not necessary 
     case OK => Ok(response.body) 
     case x => new Status(x)(response.body) 
    }) 
    .recover { 
    case ex: Throwable => 
     InternalServerError("some exception...") 
    } 
+0

與請求和響應頭,會發生什麼? –