Grails 3,rest-api。如何将关联作为对象,而不仅仅是ID

时间:2016-12-21 19:36:33

标签: json rest grails

使用profile = rest-api构建grails app。一切正常,但关联只显示为使用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对象呢?我需要应用程序的全局解决方案。

2 个答案:

答案 0 :(得分:3)

不是默认情况下急切关注,最好使用连接查询:

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

答案 1 :(得分:0)

我正在运行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,
                ...
            ]
        }
    ]
}