gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 03:43:07 24 4
gpt4 key购买 nike

遵循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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com