【问题标题】:Overriding Grails uncaughtExceptionHandler覆盖 Grails uncaughtExceptionHandler
【发布时间】:2013-11-15 14:22:57
【问题描述】:

我正在使用 Grails 2.3 创建一个 REST API,并且我想要一种更好的方法来处理将错误响应呈现为 JSON 响应。目前有一个异常包,它们都有一个 toJSON 方法。因此,我所有的控制器方法都将所有内容包装在相同的 try/catch 块中,并以相同的方式呈现任何错误响应。

我真正想要的是有一个未捕获的异常处理程序来完成所有这些,而不必将所有内容都包装在 try/catch 中。因此,如果有未捕获的异常,它会自动将异常转换为 JSON,设置适当的状态码,并写入和刷新响应。

考虑到这一切,以下是实际问题: 所以第一个问题是:这是一个愚蠢的想法吗?

由于 Grails 处理所有线程池,我认为我需要在每次 api 调用开始时注册我的处理程序。我应该在每个控制器的 beforeInterceptor 闭包中执行此操作吗?

另外,我如何能够从我的处理程序访问响应对象,以便能够编写正确的响应?

即使有人可以将我指向文档中的相关 grails 类,那也会有很大帮助。我搜索并找不到 grails 执行此操作的类,看看我是否可以使用他们现有的类而不是编写自己的类。

【问题讨论】:

    标签: grails uncaughtexceptionhandler


    【解决方案1】:

    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 或 try catch 块似乎势不可挡。正如 Spring 框架所倡导的,只捕获您需要专门处理的异常,而不是常见错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-25
      • 2015-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-28
      • 2015-09-13
      相关资源
      最近更新 更多