【发布时间】:2013-11-18 17:38:41
【问题描述】:
我正在尝试在测试 grails 应用程序上使用过滤器添加自定义标头。我已经设置了这样的过滤器:
class MyFilters {
def filters = {
addHeader(uri: '/*') {
after = { Map model ->
response.setHeader('X-Test-Header', '123')
}
}
}
}
如果我尝试访问控制器并检查标题:
curl -I -H "Accept: text/html" -X GET 'http://localhost:8080/Test1/doSomething'
然后,我得到了额外的标题:X-Test-Header: 123 但如果我使用“Accept: application/json”尝试上述 curl,我会得到 JSON 格式的内容,但我没有得到任何额外的标题。
我做错了什么?
我忘了提到我正在试验新的 grails REST 功能并且我的控制器扩展了 RestfulController
编辑:我做了一些额外的实验。我添加了另一个过滤器作为 groovy 类并修改了 web.xml(从this article - grails-add-header-to-every-response 得到了这个想法,它不适用于 application/json 但适用于 text/html!扩展 RestfulController 是否有可能绕过标准过滤器?
EDIT2:添加标头似乎适用于 application/xml 和 text/xml,但不适用于 application/json 和 text/json。我看的越多,它似乎是一个错误,而不是我做错了什么,因为我在全新 VM 上的全新项目上看到完全相同的行为(以防我的开发机器有某种奇怪的配置)。我将在 JIRA 上创建一个错误报告
EDIT3:打开了JIRA case,当我知道更多时,我会更新这个任务
EDIT4:基于JIRA case,它似乎是一个错误,它将在 grails 2.3.4 上得到纠正
【问题讨论】: