![](/img/trans.png)
[英]Scala 2.7.x type mismatch error when passing null for a reference type
[英]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
但这与旧的错误处理程序不同。 过去我可以处理onHandlerNotFound
和onBadRequest
和onInternalServerError
但现在我只能处理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.