在Scala / Play Framework中显示您自己的错误消息

时间:2015-08-11 22:26:56

标签: scala playframework playframework-2.0

根据以下页面,当遇到服务器错误时,可以提供一个自己的错误页面。

https://www.playframework.com/documentation/2.2.x/ScalaGlobal http://alvinalexander.com/scala/handling-scala-play-framework-2-404-500-errors

为此,您需要使用以下内容覆盖app.Global.onError()方法:

UILabel

但是,我不想使用InternalServerError(),而是使用我自己的页面创建方法来创建整个页面:html,head,body标签等等。

所以我想按以下方式覆盖该方法:

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

PageCtrl.render()方法创建我的所有页面。我也想创建错误页面。 render()方法确保所有页面都包含所有正确的JavaScript和CSS引用,正确的页眉和页脚等。

但是,当我调用render()方法时,我收到以下错误:

override def onError(request: RequestHeader, ex: Throwable) = {
    controllers.PageCtrl.render("error", "500")
}

问题:那么我如何将AnyContent数据类型转换为Result数据类型呢?

1 个答案:

答案 0 :(得分:1)

我建议保留用于本地开发的默认错误处理程序(因为它对查看异常和编译问题很有用)。您可以使用以下内容完成所需操作:

  override def onError(request: RequestHeader, ex: Throwable): Future[Result] = {
    if (play.api.Play.isDev(play.api.Play.current)) {
      super.onError(request, ex)
    } else
      Future {
        InternalServerError(
          views.html.myawesomeerrorpage()
        )
      }
  }