grails - Grails 2.5-是否可以基于Accept header 或format参数(针对同一 Controller )调用不同的 Action ?

标签 grails

我有一个 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/

相关文章:

grails - Spring/Grails: session 变量中可以存储的数据量是否受到限制?

grails - 从Grails Controller 保存对象失败

grails - Gradle Geb saucelabs插件

grails - Grails 2.5.3无法解析 Controller 上的消息参数

grails - Amazon RDS和Elastic Beanstalk连接

grails - grails spring-security插件可以保护所有 Controller ,而不仅仅是带有@Secured注释的 Controller

hibernate - 在Grails 3中按WHERE子句过滤hasMany结果

unit-testing - Grails 1.3.7 Spock中的失败单元测试

grails - grails框架执行时的起点是哪个?

java - 从 Groovy 测试用例对 Java 类中的静态方法进行单元测试