在“呈现为 JSON”之后添加自定义标头以响应
Posted
技术标签:
【中文标题】在“呈现为 JSON”之后添加自定义标头以响应【英文标题】:Add custom headers to response after "render as 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)。 这可行。我认为还有一个带有拦截器的基本控制器并从中扩展。谢谢。 【参考方案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
【讨论】:
以上是关于在“呈现为 JSON”之后添加自定义标头以响应的主要内容,如果未能解决你的问题,请参考以下文章
SharePoint 2019 - 添加自定义响应标头不起作用
如何将自定义响应标头添加到来自 azure blob 的响应?