Как согласование содержимого Grails обрабатывает противоположные типы? - PullRequest
2 голосов
/ 08 декабря 2011

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 }
        }
    }
}

1 Ответ

5 голосов
/ 11 декабря 2011

Для Grails 2.0.0RC3 следующее вернет блок html .

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

Порядок старшинства:

  1. расширение URI
  2. формат запроса param
  3. Принять заголовок

Обратите внимание: для использования заголовка Accept необходимо изменить следующий параметр в файле grails-app / conf / Config.groovy (по умолчанию false):

grails.mime.use.accept.header = true
...