class MyController {
def myAction = {
throw new MyException("Test")
}
}
Is it possible to catch / handle the exception thrown by the code above? The following url-mapping kinda works, but it causes the exception to be logged, which is annoying because in my case I'm able to handle it.
"500"(controller: "error", action: 'myExceptionHandler', exception: MyException)
Why don't I wrap the code that might throw an exception in try / catch? Well I have several actions that might throw the same exception. Wrapping each and every one of them in try / catch violates the DRY-principle.
How about this awesome pattern.
http://grails.1312388.n4.nabble.com/Possible-to-get-the-errorhandler-calling-a-controller-closure-td1354335.html
class UrlMappings {
static mappings = {
"/$controller/$action?/$id?" {
constraints { // apply constraints here }
}
"500"(controller:'system', action:'error')
}
class SystemController {
def error = {
// Grails has already set the response status to 500
// Did the original controller set a exception handler?
if (request.exceptionHandler) {
if (request.exceptionHandler.call(request.exception)) {
return
}
// Otherwise exceptionHandler did not want to handle it
}
render(view:"/error")
}
}
class MyAjaxController {
def beforeInterceptor = {
request.exceptionHandler = { ex ->
//Do stuff
return true
}
}
def index = {
assert false
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With