gpt4 book ai didi

json - Grails 2 - 自动生成 JSON 输出(就像 Spring 3.x 那样)

转载 作者:行者123 更新时间:2023-12-04 10:41:24 25 4
gpt4 key购买 nike

在 Spring MVC 3.x 中,我可以配置一个 ContentNegotiatingViewResolver bean 只需将文件扩展名更改为 .json 即可自动呈现任何给定的 JSON 或 XML 端点。或 .xml .我认为 Grails 中有一个等效的功能,但我找不到它。

我读过的所有内容都说我必须捕获传入的 MIME 类型(使用 withFormat ),然后使用 render as JSON 指定 JSON 输出。 (或等效的)在我的每个 Controller 方法中(例如 rendering JSON with Grails? )。在我深入研究并开始向我的 Controller 添加特定于 JSON 的代码之前,我想我会在这里问......

所以我的问题是:我可以通过简单地为任何给定的 URL 添加一个 `.json' 文件扩展名(或更改接受 header )来配置 Grails 2 以自动生成 JSON 输出吗?

最佳答案

我认为你可以很容易地使用 grails filter

这是我在我的应用程序中使用 OAuth API 完成的过滤器,它根据接受 header 执行 xml、json 和 yalm

class RenderFilters {

def grailsApplication

def filters = {

multiFormat(controller: '*EndPoint', action: '*', search: true) {

after = { Map model ->

def accepts = request.getHeaders('accept')*.toLowerCase()

def out = model.containsKey('out')?model.out:model

if(accepts.any{ it.contains('json') }){
render(text: out as JSON, contentType: 'application/json', encoding:"UTF-8")
}

else if(accepts.any{ it.contains('yaml') }){
render(text: Yaml.dump(out), contentType: 'application/x-yaml;', encoding:"UTF-8")
}

else if(accepts.any{ it.contains('html') }){
render(text: out as JSON, contentType: 'application/json', encoding:"UTF-8")
}

else if(accepts.any{ it.contains('xml') }){
render(text: out as XML, contentType: 'application/xml', encoding:"UTF-8")
}

else {
render(text: out as JSON, contentType: 'application/json', encoding:"UTF-8")
}
false
}

before = {

def contentType = request.getHeader('Content-Type')?.toLowerCase()

if(!contentType) return true

if(contentType == 'application/json'){
params.body = JSON.parse(request.reader)
}
if(contentType == 'application/xml'){
params.body = XML.parse(request.reader)
}
if(contentType == 'application/x-yaml'){
params.body = Yaml.load(request.reader)
}

params.body = new TypeConvertingMap((Map) params.body)

true
}

}

}
}

关于json - Grails 2 - 自动生成 JSON 输出(就像 Spring 3.x 那样),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11876570/

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