Grails 2.5-是否可以基于Accept头或格式化参数(针对同一控制器)调用不同的操作



我有一个控制器方法,它当前映射在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 }
        }
    }
}

最新更新