如何使用Play创建全局自定义查找404/505错误页面?
答案 0 :(得分:12)
在Play Framework 1中,您只需修改提供的app/views/errors/404.html
和app/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
您需要一个onHandlerNotFound
处理程序以及上面的onError
处理程序:
override def onHandlerNotFound(request: RequestHeader) = {
Future.successful(NotFound(views.html.errors.notFoundPage()))
}
来源:这没有记录,但请查看GlobalSettings
特征定义。
可以在此处阅读2.3.x生产中的默认错误模板的来源:
答案 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 :("))
}
}
}