簡體   English   中英

如何在開發人員模式下而非生產環境中調用默認錯誤頁面(Play Framework 2.3.4-Java)

[英]How to call default error pages in dev mode but not production (Play Framework 2.3.4 - Java)

遵循該文檔,我能夠通過覆蓋GlobalSettings類中的方法在我的應用程序中實現自定義錯誤處理程序:

@Override
public Promise<Result> onBadRequest(RequestHeader request, String error) {
    return Promise.<Result> pure(Results.notFound(com.me.project.views.html.pages.ErrorPage
            .render(Constants.HTTP_400)));
}

@Override
public Promise<Result> onHandlerNotFound(RequestHeader request) {
    return Promise.<Result> pure(Results.notFound(com.me.project.views.html.pages.ErrorPage
            .render(Constants.HTTP_404)));
}

@Override
public Promise<Result> onError(RequestHeader request, Throwable t) {
    return Promise.<Result> pure(Results.notFound(com.me.project.views.html.pages.ErrorPage
            .render(Constants.HTTP_500)));
}

但是,我只希望將它們用於生產而不是開發中,因為在瀏覽器中顯示的錯誤非常有用。

我能夠使用以下命令檢測應用程序是否處於開發模式:

boolen isDev = play.api.Play.isDev(play.api.Play.current());

但是我不知道如何調用默認錯誤頁面。 您如何稱呼默認錯誤頁面? 我在這里查看了代碼,但是我的Scala很差,而且似乎無法正常工作。 我應該在全局對象中移植到java的部分是:

private def defaultErrorHandler: HttpErrorHandler = {
    Play.maybeApplication.fold[HttpErrorHandler](DefaultHttpErrorHandler) { app =>
        app.injector.instanceOf[DefaultHttpErrorHandler]
    }
}

def onError(request: RequestHeader, ex: Throwable): Future[Result] =
    defaultErrorHandler.onServerError(request, ex)

def onHandlerNotFound(request: RequestHeader): Future[Result] =
    defaultErrorHandler.onClientError(request, play.api.http.Status.NOT_FOUND)

def onBadRequest(request: RequestHeader, error: String): Future[Result] =
    defaultErrorHandler.onClientError(request, play.api.http.Status.BAD_REQUEST, error)

但是我不能移植它,因為Play.maybeApplication東西無法解析(它們是否受到保護)?!?

我敢肯定這應該很容易,但是我有點卡住了。

另外作為一個旁注,任何人都可以解釋這些文檔的存在,這些文檔似乎暗示錯誤處理將在2.4.x:S中完全改變,我認為這個問題在2.4發布之前將是短暫的?

如果瀏覽GlobalSettings.java源,則會發現onError(RequestHeader request, Throwable t)onHandlerNotFound(RequestHeader request)的默認實現返回null,因此您可以通過以下方式覆蓋這些方法:

if(Play.isDev()){
    return null;
} else {
    // return promise of result...
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM