使用此处报告的方案处理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的最佳实践/推荐方式吗?
答案 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
的文章