8.3.6 Mapping to Response Codes
Grails also lets you map HTTP response codes to controllers, actions or views. Just use a method name that matches the response code you are interested in:
static mappings = {"403"(controller: "errors", action: "forbidden")"404"(controller: "errors", action: "notFound")"500"(controller: "errors", action: "serverError")}
Or you can specify custom error pages:
static mappings = {"403"(view: "/errors/forbidden")"404"(view: "/errors/notFound")"500"(view: "/errors/serverError")}
Declarative Error Handling
In addition you can configure handlers for individual exceptions:
static mappings = {"403"(view: "/errors/forbidden")"404"(view: "/errors/notFound")"500"(controller: "errors", action: "illegalArgument",exception: IllegalArgumentException)"500"(controller: "errors", action: "nullPointer",exception: NullPointerException)"500"(controller: "errors", action: "customException",exception: MyException)"500"(view: "/errors/serverError")}
With this configuration, an IllegalArgumentException will be handled by the illegalArgument action in ErrorsController, a NullPointerException will be handled by the nullPointer action, and a MyException will be handled by the customException action. Other exceptions will be handled by the catch-all rule and use the /errors/serverError view.
You can access the exception from your custom error handing view or controller action using the request’s exception attribute like so:
class ErrorController {def handleError() {def exception = request.exception// perform desired processing to handle the exception}}
If your error-handling controller action throws an exception as well, you’ll end up with a StackOverflowException. |