首页 > 解决方案 > Grails JSON 渲染器未公开拦截器的模型

问题描述

我想将model字段Interceptor用于 JSON REST 响应。

控制器方法以域对象响应:

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

JSON 视图使用JsonViewJsonRendererwhich extends DefaultViewRenderer,它直接调用

  view.render(model, request, response)

并且不公开ModelAndView实例。其他渲染器,例如DefaultHtmlRenderer,通过以下方式公开模型:

 applyModel(context, object)

有没有办法在响应 JSON 响应时填写模型字段?我是否需要建立自己的子类DefaultHtmlRendererModelAndView

作为一种解决方法,我可以ModelAndView为每个响应创建一个,但这似乎不符合 Grails 的易用性精神:

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

标签: grailsviewjson-view

解决方案


有没有办法在响应 JSON 响应时填写模型字段?

是的。model所有拦截器都有一个可用的属性。通常这将在after()拦截器的方法中访问。

我是否需要构建自己的 DefaultHtmlRenderer 子类来设置 ModelAndView?

不。


推荐阅读