Grails 2.5 - 是否可以根据Accept标头或格式参数(对于同一个控制器)调用不同的操作?

时间:2015-06-24 12:25:53

标签: grails

我有一个控制器方法,当前映射到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标题来执行此操作?

谢谢!

1 个答案:

答案 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 }
        }
    }
}