我使用Grails 2.3创建REST API,我想要一种更好的方法来处理渲染错误响应作为JSON响应。目前有一个包含所有toJSON方法的异常包。因此,我的所有控制器方法都将所有内容包装在相同的try / catch块中,并以相同的方式呈现任何错误响应。
我真正想要的是拥有一个未捕获的异常处理程序,无需在try / catch中包装所有内容即可完成所有这些操作。因此,如果存在未捕获的异常,它将自动将异常转换为JSON,设置相应的状态代码,并写入并刷新响应。
鉴于这一切,这是实际的问题: 所以第一个问题是:这是一个愚蠢的想法吗?
由于Grails处理所有线程池,我认为我需要在每次api调用开始时注册我的处理程序。我应该在每个控制器的beforeInterceptor闭包中这样做吗?
另外,我如何能够从我的处理程序访问响应对象,以便能够写出正确的响应?
即使有人能指出我在文档中的相关grails课程,这将是一个很大的帮助。我搜索并找不到grails这样做的类,看看我是否可以使用他们现有的类而不是自己编写。
答案 0 :(得分:0)
http://grails.org/doc/latest/guide/theWebLayer.html#mappingToResponseCodes可能有所帮助。实质上,映射的自定义ErrorController可以将未捕获的异常呈现给JSON,
class MyJSONErrorController {
def handleError() {
def exception = request.exception
// perform desired processing to handle the exception
render exception as JSON
}
}
在每个控制器中执行beforeInterceptor或尝试catch块似乎势不可挡。正如Spring框架所倡导的那样,只捕获需要处理的异常而不是常见错误。