2

Grails 支持来自 3 个不同来源的内容协商:

  1. 接受标头
  2. 请求参数(格式)
  3. URI 扩展

问题是,当它从多个地方获取内容信息时,尤其是当它们彼此不一致时,它会做什么?

例如,如果 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 }
        }
    }
}
4

1 回答 1

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. 接受标头

请注意,为了使用 Accept 标头,您必须更改grails-app/conf/Config.groovy文件中的以下参数(默认为 false):

grails.mime.use.accept.header = true
于 2011-12-11T17:53:40.080 回答