在Play Framework中创建自定义的404/500错误页面

时间:2012-01-15 16:10:46

标签: java playframework

如何使用Play创建全局自定义查找404/505错误页面?

4 个答案:

答案 0 :(得分:12)

在Play Framework 1中,您只需修改提供的app/views/errors/404.htmlapp/views/errors/500.html

答案 1 :(得分:8)

2.5.x中的错误处理已更改。您现在需要 ErrorHandler 来处理错误并自行显示自定义错误页面。

2.5.x的文档说:

提供自定义错误处理程序

import play.api.http.HttpErrorHandler
import play.api.mvc._
import play.api.mvc.Results._
import scala.concurrent._
import javax.inject.Singleton;

@Singleton
class ErrorHandler extends HttpErrorHandler {

  def onClientError(request: RequestHeader, statusCode: Int, message: String) = {
    Future.successful(
      Status(statusCode)("A client error occurred: " + message)
    )
  }

  def onServerError(request: RequestHeader, exception: Throwable) = {
    Future.successful(
      InternalServerError("A server error occurred: " + exception.getMessage)
    )
  }
}

您可以在Github上找到默认错误页面:https://github.com/playframework/playframework/tree/master/framework/src/play/src/main/scala/views/defaultpages

有关详细信息,请参阅https://www.playframework.com/documentation/2.5.x/ScalaErrorHandling

答案 2 :(得分:3)

在2.3.x的文档中:

提供应用程序错误页面

当您的应用程序发生异常时,将调用onError操作。默认是使用内部框架错误页面:

import play.api._
import play.api.mvc._
import play.api.mvc.Results._
import scala.concurrent.Future

object Global extends GlobalSettings {

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

}

来源:https://www.playframework.com/documentation/2.3.x/ScalaGlobal#Providing-an-application-error-page

未找到(404)错误页面

您需要一个onHandlerNotFound处理程序以及上面的onError处理程序:

override def onHandlerNotFound(request: RequestHeader) = {
  Future.successful(NotFound(views.html.errors.notFoundPage()))
}

来源:这没有记录,但请查看GlobalSettings特征定义。

默认错误页面模板源

可以在此处阅读2.3.x生产中的默认错误模板的来源:

https://github.com/playframework/playframework/blob/2.3.x/framework/src/play/src/main/scala/views/defaultpages/error.scala.html

答案 3 :(得分:0)

您可以使用此:

import javax.inject.{Inject, Singleton}
import play.api.http.DefaultHttpErrorHandler
import play.api.mvc.Results._
import play.api.mvc.{RequestHeader, Result}

import scala.concurrent.{ExecutionContext, Future}

@Singleton
class ErrorHandler @Inject()(implicit executionContext:ExecutionContext) extends   DefaultHttpErrorHandler{



override def onServerError(request: RequestHeader, exception: Throwable): Future[Result] = {
exception match {
  case e:scala.MatchError => Future(Ok("Page Not Found"))
  case _ => Future(Ok("Internal Server Error :("))

}

}


}