【发布时间】:2016-06-08 02:58:04
【问题描述】:
Grails 2.5.4 docs 表示可以将属性从整个域类组的渲染中排除。
有一些默认配置的渲染器以及注册或覆盖给定域类甚至域类集合的渲染器的能力。
但是文档中没有给出如何执行此操作的示例。有谁知道如何排除我所有域类的属性?具体来说,我试图摆脱 Grails 自动添加到响应正文中的 class 和 enumType 字段。
【问题讨论】:
Grails 2.5.4 docs 表示可以将属性从整个域类组的渲染中排除。
有一些默认配置的渲染器以及注册或覆盖给定域类甚至域类集合的渲染器的能力。
但是文档中没有给出如何执行此操作的示例。有谁知道如何排除我所有域类的属性?具体来说,我试图摆脱 Grails 自动添加到响应正文中的 class 和 enumType 字段。
【问题讨论】:
似乎没有什么好的方法可以做到这一点。我发现,如果您为超类注册排除项,所有子类也会“继承”该排除项。因此,为了摆脱 all Groovy 对象(涵盖所有域类)的四个属性,我将以下 bean 添加到 resources.groovy。
groovyObjectJsonRenderer(JsonRenderer, GroovyObject) {
excludes = ['class', 'declaringClass', 'errors', 'version']
}
【讨论】:
我不知道你是不是在说这个,但是你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
}
}
你可以把它放在你认为更好的地方,我实际上更喜欢把它放在我覆盖的类中,因为我可以找到它,或者如果其他人正在寻找代码,他/她可以很容易地找到它。
【讨论】:
class 属性,所以我很惊讶没有一个全球性的单线来摆脱这个无关的领域响应机构。