在使用“as JSON”呈现响应时更改 JSON 响应的 Content-Type

Posted

技术标签:

【中文标题】在使用“as JSON”呈现响应时更改 JSON 响应的 Content-Type【英文标题】:Change Content-Type of JSON response while using 'as JSON' to render response 【发布时间】:2011-11-01 07:51:46 【问题描述】:

似乎在 Grails 中,默认 contentType 用于在使用如下内容时呈现 JSON 响应:

render Book.list(params) as JSON

是应用程序/json

当然还有一种更简单的方法来定义内容类型:

render(contentType:"text/json") 
    book(title:b.title,author:b.author)

有没有办法使用速记方式,并且仍然得到“text/json”的响应内容类型?

注意:示例取自here

【问题讨论】:

【参考方案1】:

在您的 grails config.groovy 中,您可以设置以下 mime 类型属性。

grails.mime.types = [ html: ['text/html','application/xhtml+xml'],
                xml: ['text/xml', 'application/xml'],
                text: 'text/plain',
                js: 'text/javascript',
                rss: 'application/rss+xml',
                atom: 'application/atom+xml',
                css: 'text/css',
                csv: 'text/csv',
                all: '*/*',
                json: ['application/json','text/json'],
                form: 'application/x-www-form-urlencoded',
                multipartForm: 'multipart/form-data'
]

尝试将 json 属性的值列表的顺序更改为 ['text/json','application/json']

【讨论】:

它不像我们所拥有的那样工作: /** * 将 JSON Writer 定向到 HttpServletResponse 的输出流并将 Content-Type 设置为 application/json * * @param response a HttpServletResponse * @ throws ConverterException */ public void render(HttpServletResponse response) throws ConverterException response.setContentType(GrailsWebUtil.getContentType("application/json", encoding));尝试渲染(response.getWriter()); catch (IOException e) throw new ConverterException(e); 在 JSON.java 中

以上是关于在使用“as JSON”呈现响应时更改 JSON 响应的 Content-Type的主要内容,如果未能解决你的问题,请参考以下文章

与 AngularJS 一起使用时,Django 模板不呈现 JSON 响应

Fabric.js 对象在 DOM 加载时从 JSON 呈现时无法更改填充颜色

在JSON中存储字符串::任何变量都不起作用

如何使用最新的 typeahead.js 库呈现 JSON 响应

使用 Pandas 从 BigQuery 呈现 JSON 响应?

在“呈现为 JSON”之后添加自定义标头以响应