#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