我有一个控制器方法,它当前映射在UrlMappings上,如下所示:
"/api/objects"(controller: 'apiObject', action: [GET: "list"], parseRequest: true)
这很好用。list操作返回对象列表的JSON表示。
我现在想做的是,除此之外,添加将相同列表表示为CSV文件的可能性。
例如,我希望'/api/objects'
调用保持由ApiObjectController#list
提供服务,而'/api/objects?format=csv'
由不同的方法(如ApiObjectController#renderListAsCsv
)提供服务。
是否可以通过使用format=csv
参数或Accept
标头来做到这一点?
谢谢!
您可以使用基于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 }
}
}
}