Grails 2 – 自动生成JSON输出(就像Spring 3.x一样)

前端之家收集整理的这篇文章主要介绍了Grails 2 – 自动生成JSON输出(就像Spring 3.x一样)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
Spring MVC 3.x中,我可以配置ContentNegotiatingViewResolver bean,只需将文件扩展名更改为.json或.xml,即可自动呈现 JSON或XML中的任何给定端点.我假设在Grails中有相同的功能但我找不到它.

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

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

解决方法

我认为你可以使用 grails filter轻松地使用它

这是我在矿山应用程序中使用OAuth API执行的过滤器,它基于接受头执行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,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,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
                }

        }

    }
}
原文链接:https://www.f2er.com/js/158165.html

猜你在找的JavaScript相关文章