例外発生時の処理をコントロールした時は、例外時に呼び出される Controller を定義してやるとよい。
UrlMappings.groovy
1 2 3 4 5 |
static mappings = { "500"(controller: 'Error') } |
で、 500エラーの時には、 ErrorController.goovy が呼ばれる。
次にこの ErrorController.goovy を作る。
ErrorController.groovy では、index が呼ばれるのでそこで処理を定義する。
例外が発生すると同じ処理がまた呼ばれてしまうので、処理が終わらなくなる。もしくは、StackOverFlow で終わるか。
なので、catch するなりして再帰的に呼ばれないように注意。
ErrorController.groovy
1 2 3 4 5 6 7 8 9 10 |
class ErrorController { def index() { // これで例外が取れる def exception = requet.exception.cause // 後は例外別の処理と遷移先を定義してやる。 } } |