【问题标题】:Grails 3, rest-api. How to get associations as objects, not just idsGrails 3,rest-api。如何将关联作为对象,而不仅仅是 id
【发布时间】:2016-12-24 00:27:17
【问题描述】:

使用 profile=rest-api 构建 grails 应用程序。一切正常,但关联仅显示为使用 JSON 作为 responseFormat 的 id 列表。我试过了:

static mapping = {
children fetch: 'join'
children lazy: false
}

fetchMode = [children: 'eager']

在控制器中,我正在渲染 JSON 响应,如下所示:

respond Parent.list()

还启用了旧版 JSON 转换器并设置:

grails.converters.json.default.deep = true

那么我到底怎么才能让孩子们作为 JSON 对象来响应响应呢?我需要应用的全局解决方案。

【问题讨论】:

    标签: json rest grails


    【解决方案1】:

    默认情况下,与其使关联急切,不如使用连接查询:

    respond Parent.list(fetch:[children:'join'])
    

    【讨论】:

    • 嗯,这是“当然”可能的,但我很乐意在一个地方“全局”定义它,因此无需在每个数据库搜索中添加所有需要的关联。我现在通过不使用响应解决了这个问题,而是将对象呈现为 JSON。似乎工作正常。
    【解决方案2】:

    我正在运行 Grails 2.4,但我们使用的解决方案是 Grails Marshallers plugin

    我找不到任何有关支持 Grails 3 的文档,但它只是对现有 Grail 方法 (JSON.registerObjectMarshaller()) 的封装,所以它本质上应该可以工作。

    class Parent {
    
        ...
    
        static marshalling = {
            json {
                deep 'children'
            }
        }
    }
    


    如果您不愿意为此特定实例安装插件,那么您始终可以使用 BootStrap.groovy 来注册您的类:
    JSON.registerObjectMarshaller(Parent) { p ->
        return [
            p.id
            ...
            children: p.children.collect{ c ->
                [
                    id: c.id,
                    ...
                ]
            }
        ]
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-24
      • 2016-07-12
      • 1970-01-01
      • 1970-01-01
      • 2020-10-08
      • 2020-04-22
      • 1970-01-01
      • 2015-06-29
      相关资源
      最近更新 更多