繁体   English   中英

PlayFramework 应用程序 2.7.x 自定义错误页面,适用于每种类型的错误

[英]PlayFramework Application 2.7.x Custom Error Page for each type of Error

当控制器返回 InternalServerError 时,我想要一个自定义页面以用户友好的方式呈现错误消息。

我在互联网上找到了这个文档

https://www.playframework.com/documentation/2.3.x/ScalaGlobal

现在我知道上面的 URL 对 Playframework 2.7 不再有效。 我搜索了更多,发现了这个

https://www.playframework.com/documentation/2.7.x/ScalaErrorHandling

但这与旧的错误处理程序不同。 过去我可以处理onHandlerNotFoundonBadRequestonInternalServerError但现在我只能处理onServerError

使用从HttpErrorHandler扩展的新方法如何根据每种类型的错误将响应发送到自定义错误页面。

编辑:也许问题不清楚。 在错误处理程序中,我想将错误发送到自定义错误页面。 这在我可以做的 play 2.3.x 示例中显示

object Global extends GlobalSettings {
  override def onError(request: RequestHeader, ex: Throwable) = {
    Future.successful(InternalServerError(
      views.html.errorPage(ex)
    ))
  }
}

我想在 Play 2.7.x 及更高版本中做类似的事情。

如果您想为未处理的异常提供自定义错误页面,就像在 Play 2.3 中使用onError方法一样,在 Play 2.7 中实现ErrorHandler.onServerError方法。

对于 Bad Request 和 Not Found 等客户端错误,可以实现ErrorHandler.onClientError方法,该方法允许根据状态码返回自定义模板。

import javax.inject.Singleton
import play.api.http.DefaultHttpErrorHandler
import play.api.http.Status._
import play.api.mvc.Results._
import play.api.mvc._
import scala.concurrent._

@Singleton
class ErrorHandler extends DefaultHttpErrorHandler {

  override def onClientError(request: RequestHeader, statusCode: Int, message: String): Future[Result] = {
    statusCode match {
      case NOT_FOUND => Future.successful(NotFound(views.html.notFound()))
      case BAD_REQUEST => Future.successful(BadRequest(views.html.badRequest()))
      case _ => super.onClientError(request, statusCode, message)
    }
  }

  override def onServerError(request: RequestHeader, ex: Throwable): Future[Result] = {
    Future.successful(
      InternalServerError(views.html.errorPage(ex))
    )
  }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM