使用Grail 1.3.7我发现JSON转换器忽略了Domain对象的瞬态属性。 问题:有没有一种优雅的方法来解决这个障碍。Grails JSON转换器和瞬态属性
奖金问题:排除计算字段(瞬态道具)被发送到响应的原因是什么?
使用Grail 1.3.7我发现JSON转换器忽略了Domain对象的瞬态属性。 问题:有没有一种优雅的方法来解决这个障碍。Grails JSON转换器和瞬态属性
奖金问题:排除计算字段(瞬态道具)被发送到响应的原因是什么?
一种方法是手动创建您的json响应,例如,
["prop1" : obj.prop1, "prop2" : obj.prop2, ...] as JSON
和JSON是对象
所以,如果你需要它来进行序列化的序列化(=持续的)状态 - 你必须创建一个新的类,只是为了json序列化,这将有你需要序列化的所有字段。
+1正确回答奖金Q.但是我觉得有一个合法的用例来标记一个字段的瞬态,但也让JSON转换器来捡起它 - 一个配置标志将在这里创造奇迹:) – dbrin
如果你需要排除的JSON,我细使用JSONBuilder比转换器一个更好的选择,所包含的字段/细粒度控制。这里的an example如何做到这一点。
您可以使用“marshallers”插件,并定义瞬态特性虚拟这样的:
static marshalling = {
virtual {
yourPropery { value, json -> json.value(value.yourPropery) }
}
}
好吧我想......但如果我有20个字段运行? – dbrin
您可以通过调用domainClass.properties来获取所有属性,然后对这些属性进行交互并生成json响应。有许多财产访问方法。看看:http://grails.org/doc/latest/api/org/codehaus/groovy/grails/commons/DefaultGrailsDomainClass.html – hitty5
我试过了,但我没有看到一种方法来限制到的子集属性给我关心的一次......我必须俯视一些东西。但我同意你的观点,这可能是自定义JSON响应而不创建自定义编组器的最佳方式。 – dbrin