异常处理Grails的控制器,ExceptionMapper Grails的2.2.4最佳实践(Ex

2019-10-29 17:11发布

虽然处理异常Grails的2.2.4在这里报道的方案:

Grails中控制器的异常处理

    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的最佳实践/推荐的方式?

Answer 1:

您复制从另一个问题一些代码,但它使用的ExceptionMapper类不是Groovy的Grails的或部分(如果它是你需要一个import语句),而不是在回答中定义。 我不知道它做什么,但这样的事情应该工作:

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


Answer 2:

有很多帖子指向投掷并转发到视图处理错误的老路。 使用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")
}

异常处理的方法可以在一个特质移动和任何你想要的控制器来实现。 如果错误是从服务抛出,它可以在它被调用服务的控制器来追踪。 文章描述了处理Grails的异常处理



文章来源: Exception handling in Grails controllers with ExceptionMapper in Grails 2.2.4 best practice