【问题标题】:Add custom headers to response after "render as JSON"在“呈现为 JSON”之后添加自定义标头以响应
【发布时间】:2013-05-31 00:36:40
【问题描述】:

我正在尝试使用 Grails 过滤器将自定义 HTTP 标头添加到一组控制器的响应中:

class ApiFilters {
   def filters = {
      xwingFilter(uri:'/api/**') {
         after = {
            response.setHeader('X-Wing', 'foo')
         }
      }
   }
}

如果控制器呈现视图或文本,则标头会添加到响应中。 如果控制器使用“呈现为 JSON”,则不添加标头。看起来 JSON 转换器正在关闭输出流并立即发送。对吗?

我可以使用 Grails 拦截器,但我必须在多个控制器中复制它。 关于如何实现这一目标的任何想法?

【问题讨论】:

  • 您可以在启动时将 afterInterceptor 动态添加到所有控制器 (Bootstrap.groovy)。
  • 这可行。我认为还有一个带有拦截器的基本控制器并从中扩展。谢谢。

标签: grails grails-2.0 grails-controller


【解决方案1】:

您可以在过滤器中进行从模型到 JSON 的转换,而不是在操作中:

控制器:

class myController {
    def myAction() {
        [aThing: 1, anotherThing: [a: 1, b: 2]]
    }
}

过滤器:

class ApiFilters {
    def filters = {
        xwingFilter(uri:'/api/**') {
            after = { model ->
                response.setHeader('X-Wing', 'foo')
                render model as JSON
                return false // prevent normal view from rendering
            }
        }
    }
}

【讨论】:

    猜你喜欢
    • 2019-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-04
    • 2019-06-10
    • 2018-02-26
    相关资源
    最近更新 更多