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 に答える