我有一个 Controller 方法,该方法目前映射在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
header 可以做到这一点吗?谢谢!
最佳答案
您可以根据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 }
}
}
}
关于grails - Grails 2.5-是否可以基于Accept header 或format参数(针对同一 Controller )调用不同的 Action ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31026526/