Grails控制器中的异常处理,在Grails 2.2.4中使用ExceptionMapper进行最佳实践

时间:2013-10-23 16:40:20

标签: exception grails exception-handling controller

使用此处报告的方案处理Grails 2.2.4中的异常时:

Exception handling in Grails controllers

    class ErrorController {
      def index() {

        def exception = request.exception.cause
        def message = ExceptionMapper.mapException(exception)
        def status = message.status

        response.status = status
        render(view: "/error", model: [status: status, exception: exception])
      }
   }

引发异常:

groovy.lang.MissingPropertyException: No such property: ExceptionMapper for class: ErrorController

一般处理控制器异常的grails机制如何工作?

建议的代码是Grails的最佳实践/推荐方式吗?

2 个答案:

答案 0 :(得分:4)

您从另一个问题中复制了一些代码,但它使用的是不属于Groovy或Grails的ExceptionMapper类(如果您需要导入语句,则使用该类),并且未在答案。我不确定它是做什么的,但这样的事情应该有效:

def exception = request.exception.cause
response.status = 500
render(view: "/error", model: [exception: exception])

答案 1 :(得分:1)

有许多帖子指向通过转发到视图来抛出和处理错误的旧方法。 使用Grails 2.3.0,最佳做法是遵循声明性异常处理方法:

Grails控制器支持声明性异常处理的简单机制。如果控制器声明一个接受单个参数的方法,并且参数类型是java.lang.Exception或java.lang.Exception的某个子类,则只要该控制器中的操作引发该类型的异常,就会调用该方法。

class ElloController  {
def index() { 
    def message="Resource was not found"
    throw new NotFoundException(message);
}

def handleNotFoundExceptio(NotFoundException e) {
    response.status=404
    render ("error found")
}

异常处理的方法可以在特征中移动,并为您想要的任何控制器实现。如果从服务中抛出错误,则可以在它正在调用服务的控制器中跟踪它。一篇描述Handling Grails Exception Handling

的文章