Grails的内容协商如何处理相反的类型?

时间:2011-12-08 19:42:17

标签: rest grails content-type content-negotiation

来自3个不同来源的

Grails supports content negotiation

  1. 接受标题
  2. 请求参数(格式)
  3. URI扩展
  4. 问题是,当它从多个地方获取内容信息时,它会做什么,特别是当它们彼此不一致时?

    例如,如果Grails收到如下所示的请求会发生什么:

    URL: http://example.com/book/list.html?format=json
    Accept: application/xml
    

    Accept标头将解析为xml,URI扩展将解析为html,参数将解析为json。

    这会做什么:

    import grails.converters.*
    
    class BookController {
    
        def list() {
            def books = Book.list()
            withFormat {
                html bookList: books
                xml { render books as XML }
                json { render books as JSON }
            }
        }
    }
    

1 个答案:

答案 0 :(得分:5)

对于Grails 2.0.0RC3,以下内容将返回 html 块。

curl -v -H "Accept: application/xml" http://localhost:8080/book/book/list.html?format=json

优先顺序为:

  1. URI扩展
  2. 格式请求参数
  3. 接受标题
  4. 请注意,要使用Accept标头,您必须在 grails-app / conf / Config.groovy 文件中更改以下参数(默认为false):

    grails.mime.use.accept.header = true