对于遇到这个 SO 问题的任何人,我想我会包含我的最终 Grails(版本 2.x)过滤器代码,因为它确实与 Fabiano 的答案(上图)中的不同。
以下过滤器允许 Grails 正常处理纯 HTML 内容,并使用 Grails 内容协商机制设置response.format
按文件扩展名或接受标头(取决于 conf 设置:grails.mime.use.accept.header
& grails.mime.file.extensions
)。我还添加了对 JSONP 回调包装器的支持。
import grails.converters.JSON
import grails.converters.XML
class RenderFilters {
def filters = {
multiFormat(controller: '*', action: '*', find: true) {
after = { Map model ->
def out = model?.containsKey('out')?model.out:model
if (response.format == "json" && params.callback) {
render(text: params.callback + "(${out as JSON})" , contentType: 'application/javascript', encoding:"UTF-8")
false
} else if (response.format == "json") {
render(text: out as JSON, contentType: 'application/json', encoding:"UTF-8")
false
} else if (response.format == "xml") {
render(text: out as XML, contentType: 'application/xml', encoding:"UTF-8")
false
}
}
}
}
}