从呈现中排除所有Grails域类的属性

时间:2016-06-08 02:58:04

标签: json rest grails

Grails 2.5.4 docs表示可以从整个域类组的呈现中排除属性。

  

有一些默认配置的渲染器,能够为给定的域类甚至是域类集合注册或覆盖渲染器。

然而,在文档中没有给出如何执行此操作的示例。有谁知道如何排除我所有域类的属性?具体来说,我正试图摆脱Grails自动添加到响应主体的classenumType字段。

2 个答案:

答案 0 :(得分:2)

似乎没有任何好方法可以做到这一点。我发现如果你为一个超级类注册一个排除项,所有的子类也会继续"继承"那种排斥。因此,要删除所有 Groovy对象(涵盖所有域类)的四个属性,我将以下bean添加到 resources.groovy

groovyObjectJsonRenderer(JsonRenderer, GroovyObject) {
    excludes = ['class', 'declaringClass', 'errors', 'version']
}

答案 1 :(得分:1)

我不知道你是否在谈论这个,但你可以在render as JSON时忽略一些属性,覆盖 Marshaller 这里是代码:

static {
    grails.converters.JSON.registerObjectMarshaller(NAMEOFYOURCLASS) {
    return it.properties.findAll {k,v -> k != 'class' && k!='declaringClass'}
    }
}

或者如果你想创建自定义渲染,你可以做这样的事情

static {
    grails.converters.JSON.registerObjectMarshaller(NAMEOFYOURCLASS) {
        def lista = [:]
        lista['id'] = it.id
        lista['name'] = it.name
        lista['dateCreated'] = it.date?.format("dd/MM/yyyy HH:mm")
        return lista
    }
}

你可以把它放在你觉得它更好的地方我真的更喜欢把它放在班级我压倒一切,因为我可以找到它,或者如果其他人正在寻找代码,他/她可以很容易地找到它。