2017-09-04 46 views
0

我在Play中編寫微服務。我希望我的控制器能夠使用特定的JSON響應體生成客戶端錯誤(4xx)。但是,Play的默認HttpErrorHandler已啓用,並將我的響應正文替換爲HTML文檔。針對4xx錯誤繞過Play的HttpErrorHandler

我怎樣才能將我的迴應保持原樣返回給客戶端?

我已經研究過提供一個自定義HttpErrorHandler,但是這不能訪問我的控制器生成的響應;簽名:

def onClientError(request: RequestHeader, statusCode: Int, message: String): Future[Result] 

編輯:我再也無法重現此問題。現在,錯誤處理程序不會啓動 - 這是我期望的行爲。最有可能的某種形式的用戶混淆/錯誤。

回答

1

客戶端錯誤是由客戶端引起的一種情況,並且Play不知道如何處理。這包括格式不正確的標題,不存在的資源(閱讀:沒有可用於該路徑的路由)。

在所有情況下,這不會影響控制器:在路由之前處理它。這也意味着沒有可以傳遞的身體。

如果確實碰到了控制器,您可以自由地返回帶有正確響應代碼和正文的Result。如果它沒有命中控制器,並且調用錯誤處理程序,則需要根據請求本身返回響應。

你試圖達到的一個例子是方便的,因爲它對我來說還不是很清楚。

+0

嗨@Igmar,令人尷尬的是,我不再看到我以爲我昨天看到的行爲,它的行爲就像你描述的(這是我想要的)。一定是用戶混淆 - 道歉! –