我有一个控制器方法,当前映射到UrlMappings上,如下所示:
"/api/objects"(controller: 'apiObject', action: [GET: "list"], parseRequest: true)
哪个工作正常。 list动作返回对象列表的JSON表示。
我现在要做的是,添加将相同列表表示为CSV文件的可能性。
例如,我希望'/api/objects'
保留ApiObjectController#list
来保持由[{1}}提供服务,并'/api/objects?format=csv'
通过其他方法提供服务,例如ApiObjectController#renderListAsCsv
是否可以使用format=csv
param或Accept
标题来执行此操作?
谢谢!
答案 0 :(得分:0)
您可以使用基于format
查询参数的条件URL映射,如下所示。但是,以特定格式(json,csv,..)呈现响应的更常见方式是使用withFormat
。
“/api/objects" {
format = { params.format }
controller = “apiObject”
action = format == ‘csv’ ? renderListAsCsv : list
}
Grails文档介绍了如何使用withFormat完成此操作:
class BookController {
def list() {
def books = Book.list()
withFormat {
html bookList:books
js { render "alert('hello')" }
xml { render books as XML }
}
}
}