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

cde*_*zaq 2 rest grails content-type content-negotiation

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

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

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

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

URL: http://example.com/book/list.html?format=json
Accept: application/xml
Run Code Online (Sandbox Code Playgroud)

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 }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Joh*_*ner 5

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

curl -v -H "Accept: application/xml" http://localhost:8080/book/book/list.html?format=json
Run Code Online (Sandbox Code Playgroud)

优先顺序是:

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

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

grails.mime.use.accept.header = true
Run Code Online (Sandbox Code Playgroud)