【问题标题】:Grails Turn off Eager Fetching hasMany with Restful Controller or ResourceGrails 使用 Restful 控制器或资源关闭 Eager Fetching hasMany
【发布时间】:2016-02-24 03:56:00
【问题描述】:

以域类UserRole为资源为例:

@Resource(uri='/api/user', formats=['json', 'xml'])
class User {
    String username
    String password
    static hasMany = [roles: Role]
}

@Resource(uri='/api/role', formats=['json', 'xml'])
class Role {
    String authority
    static hasMany = [users: User]
    static belongsTo = [User]
}

/api/user/api/user/1 都会获取关联的 Role 对象。如何使/api/user 仅返回User 对象列表而不获取关联的Role 对象,而/api/user/1 将返回带有id=1User 对象和关联的Role 对象?

【问题讨论】:

    标签: rest grails grails-orm


    【解决方案1】:

    您可以通过...编写您自己的实现来做到这一点。 Grails 的@Resource 实现不支持您正在寻找的这些非常具体的功能。实现您自己的控制器来管理fetchMode 以满足您自己的需求。

    【讨论】:

    • 看起来 marshaller 是关键。默认情况下,对于集合和单个对象,hasMany 获取是惰性的。但是默认的编组器会返回 hasMany 对象。注册一个不将 hasMany 对象放入映射的自定义编组器将阻止 /api/user/api/user/1 返回 hasMany 对象,但无法告诉编组器我们是否要返回集合或单个对象
    猜你喜欢
    • 2013-01-23
    • 1970-01-01
    • 1970-01-01
    • 2016-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-04
    • 1970-01-01
    相关资源
    最近更新 更多