Средство визуализации Grails JSON не предоставляет модель для перехватчика

#grails #view #json-view

#grails #Вид #json-view

Вопрос:

Я хочу использовать model поле в Interceptor для ответа REST JSON.

Метод контроллера отвечает объектом домена:

 def show(String id) {
    respond User.get(id)
}
  

Представление JSON использует JsonViewJsonRenderer , который расширяется DefaultViewRenderer , который напрямую вызывает

   view.render(model, request, response)
  

и не предоставляет ModelAndView экземпляр. Другие средства визуализации, например DefaultHtmlRenderer , предоставляют модель через:

  applyModel(context, object)
  

Есть ли способ заполнить поле модели при ответе с помощью ответа JSON? Нужно ли мне создавать свой собственный подкласс DefaultHtmlRenderer , который устанавливает ModelAndView ?

В качестве обходного пути я мог бы создать ModelAndView для каждого ответа, но, похоже, это не соответствует простоте использования Grails:

 def show(String id) {
    respond new ModelAndView('user/show', User.get(id))
}
  

Ответ №1:

Есть ли способ заполнить поле модели при ответе с помощью ответа JSON?

ДА. Во model всех перехватчиках доступно свойство. Обычно к этому можно получить доступ в after() методе перехватчика.

Нужно ли мне создавать свой собственный подкласс DefaultHtmlRenderer, который задает ModelAndView?

Нет.

Комментарии:

1. Похоже, это ошибка в views-json / JsonViewJsonRenderer then, потому что модель находится null в after() методе. Я создам пример проекта для демонстрации вместе с обходным путем.

2. Пример репозитория проблемы: github.com/flicken/grails-json-interceptor-missing-model

3. Создано как проблема в grails-views github.com/grails/grails-views/issues/235