我最近在Grails应用程序中完成了这项工作,发现使用生成的控制器并根据内容协商让它们输出JSON或XML或HTML视图非常容易。
Grails手册中的内容是关于内容协商的部分,如果您需要处理JSON或XML输入,请编组。
要获得JSON和XML输出,默认list()
方法,它改变这种(我有一个Session
对象,在这种情况下......我的域名类之一):
def list() {
params.max = Math.min(params.max ? params.int('max') : 10, 100)
def response = [sessionInstanceList: Session.list(params), sessionInstanceTotal: Session.count()]
withFormat {
html response
json {render response as JSON}
xml {render response as XML}
}
}
默认情况下,您只返回对象的任何位置,您都希望将返回的值替换为withFormat
块。
您还可能需要更新您的Config.groovy文件,它处理MIME类型。下面是我有:
grails.mime.file.extensions = true // enables the parsing of file extensions from URLs into the request format
grails.mime.use.accept.header = true
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'
]
为输入(到update()
或save()
动作,例如)JSON和XML有效载荷会自动编排和将被绑定就像一个表单输入会是这样,但我发现解组过程有点挑剔(特别是使用JSON)。
我发现,为了在update()
方法中正确处理JSON,class
属性必须存在并且对入站JSON对象正确。由于我在客户端应用程序中使用的库并未使其成为一个容易处理的问题,因此我转而使用XML。
谢谢你这么详细的答案!这正是我一直在寻找的东西。 – Andy 2012-01-18 18:10:07