java - 如何在开发模式而非生产模式下调用默认错误页面(Play Framework 2.3.4 - Java)

标签 java playframework

遵循docs我能够通过重写 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());

但是我无法调用默认错误页面,因为我不知道如何调用。如何调用默认错误页面?我查看了代码here ,但我的 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 之类的东西无法解析(它们受到保护吗)?!?

我确信这应该是一件容易的事,但我有点卡住了。

另外,作为旁注,任何人都可以解释这些 docs 的存在吗?这似乎表明错误处理将在 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...
}

关于java - 如何在开发模式而非生产模式下调用默认错误页面(Play Framework 2.3.4 - Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26378810/

相关文章:

c# - C# 中的 HttpSession 等价物

java - 如何检查一个类是否已在 JAVA 中实例化

java - 无法在项目上执行目标 org.apache.maven.plugins :maven-compiler-plugin:3. 3:compile (default-compile)

java - 如何将 OpenVPN 客户端应用程序与另一个安卓应用程序合并?

java - Install4j:将 AbstractInstallAction 类扩展为另一个抽象类并实现它

java - 使用Java程序在cmd中打印阿尔巴尼亚语字符

playframework - Play 的成功案例!框架?

java - 为什么我的 Play 框架模型作为空白记录保存到数据库中?

java - JPA:通过外键引用的表的另一个字段进行索引

java - 为什么会出现空指针异常: null when getting value from view with form url encoded?