Play2 - a custom error handler
Sometimes you need a custom error handling and don’t want to stick with play’s default handler, so this short post is about writing a custom one.
To use a custom error handler with the play2 framework one needs to override the default methods in the GlobalSettings object. Our methods are namely the onError, onHandlerNotFound and the onBadRequest method.
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[Result] = {
Future.successful(InternalServerError(
views.html.errors.onError(ex)
))
}
override def onHandlerNotFound(request: RequestHeader): Future[Result] = {
Future.successful(NotFound(
views.html.errors.onHandlerNotFound(request)
))
}
override def onBadRequest(request: RequestHeader, error: String): Future[Result] = {
Future.successful(BadRequest("Bad Request: " + error))
}
}
The templates used in this example are under the views folder in a subfolder named errors namely onError, onHandlerNotFound. The BadRequest() is the default one.