【问题标题】:Grails not honoring JSONRenderer excludes for nested models?Grails 不尊重 JSONRenderer 排除嵌套模型?
【发布时间】:2015-06-22 06:41:46
【问题描述】:

我的 Grails 应用程序中有一个 REST 端点,用于渲染它对 JSON 的响应。 class 包含在 JSON 响应中,如下所示:

{
    "class": "app.User"
    "id": null,
    "admin": false,
    "contact": {
        "class": "app.Contact",
        "id": "EEF448FE-ABDC-4C2E-B10B-CD448336FC51",
        "email": "qa_costco_drop_test@commercehub.com",
        "firstName": "first",
        "lastName": "last",
        "state": {
            "class": "app.State",
            ...
        }
    }
}

我在 `grails-app/conf/spring/resources.groovy' 中添加了几个 JSONRenderer bean

userJSONRenderer(JsonRenderer, User) {
    excludes = ['class']
}
contactJSONRenderer(JsonRenderer, Contact) {
    excludes = ['class']
}
stateJSONRenderer(JsonRenderer, State) {
    excludes = ['class']
}

这摆脱了顶级用户的class 属性,但我仍然得到联系人和状态类:

{
    "id": null,
    "admin": false,
    "contact": {
        "class": "app.Contact",
        "id": "EEF448FE-ABDC-4C2E-B10B-CD448336FC51",
        "email": "qa_costco_drop_test@commercehub.com",
        "firstName": "first",
        "lastName": "last",
        "state": {
            "class": "app.State",
            ...
        }
    }
}

嵌套模型是否需要任何特殊配置?

【问题讨论】:

    标签: json grails


    【解决方案1】:

    我无法让 JSONRenderer 为嵌套模型工作。我为我的所有域对象创建了一个渲染器,认为 Grails 会为我解决这个问题,但没有运气。有趣的是,渲染器在每个类型(即“/users”、“/contacts”、“/state”)的顶层工作,而不是嵌套对象。

    我通过为我的对象图中的每种类型注册自定义对象编组器来解决此问题。这按预期工作,但有点痛苦。

    对象编组器在 JSON 类上注册:

    JSON.registerObjectMarshaller( User ) { User user ->
        return [
            id : user.id,
            admin: user.admin,
            contact: user.contact
        ]
    }
    

    您需要将每个域类的编组器添加到 Bootstrap.groovy。

    我实际上走得更远,并使用 spring bean 跟随 this example。那篇文章中有一些很棒的 cmets 讨论了注册编组器的其他方法,包括在域类本身上。

    如果你走这条路,请务必阅读我关于在 Bootstrap.groovy 中注册编组器的评论,因为它在撰写本文后发生了变化。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-02
      • 2015-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多