gpt4 book ai didi

json - Grails不为json添加标题

转载 作者:行者123 更新时间:2023-12-02 14:44:08 26 4
gpt4 key购买 nike

我正在尝试在测试grails应用上使用过滤器添加自定义 header 。我已经设置了一个这样的过滤器:

class MyFilters {
def filters = {
addHeader(uri: '/*') {
after = { Map model ->
response.setHeader('X-Test-Header', '123')
}
}
}
}

如果我尝试访问 Controller 并检查标题:
curl -I -H "Accept: text/html" -X GET 'http://localhost:8080/Test1/doSomething'

然后,我得到了额外的 header :X-Test-Header:123,但是如果我尝试使用“Accept:application / json”进行上述 curl ,则将内容作为JSON获得,但没有任何其他 header 。

我究竟做错了什么?

我忘了提到我正在尝试新的grails REST功能,并且我的 Controller 扩展了RestfulController

编辑:我做了一些其他的实验。我添加了另一个过滤器作为groovy类,并修改了web.xml(从 this article - grails-add-header-to-every-response中得到了这个想法,它不适用于application / json,但适用于text / html!扩展 RestfulController是否有可能绕过标准过滤器?

EDIT2:似乎添加 header 适用于application / xml和text / xml,但不适用于application / json和text / json。我越看越多,这似乎是一个错误,而不是我在做错什么,因为我在全新VM上的全新项目中看到了完全相同的行为(以防我的开发机具有某种奇怪的配置) )。我将在JIRA上创建错误报告

EDIT3:打开 JIRA case,当我知道更多信息时,我将更新此任务

EDIT4:基于 JIRA case,它似乎是一个错误,它将在grails 2.3.4上得到纠正。

最佳答案

打开JIRA case。看起来,“after” Action 允许在渲染 View 之前修改模型,但是response方法会渲染JSON并在输出响应后执行“after” Action (因此,修改响应为时已晚)。因此,根据Graeme Rocher的说法,一种解决方法是将 header 添加到“before”块或操作中,如下所示:

def index(Integer max) {
params.max = Math.min(max ?: 10, 100)
response.setHeader('X-MyHeader', '123')
respond Person.list(params), model:[personInstanceCount: Person.count()]
}

因此,这将纠正索引 Action 的行为

关于json - Grails不为json添加标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20054153/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com