nutzam/nutz — Issue #164: JSON获取对象属性值时, 如果get方法中有逻辑所产生的问题
Author: juqkai
Created: 2012-02-24 06:41:05+00:00
State: open

JSON获取对象属性值时, 如果get方法中有逻辑就很容易导致出现错误.

@Jay 蓝色幽默 今天给我了一个用groovy写的大对象, 但是在生成json的时候会出现堆栈溢出异常.
找了半天, 发现, 其中有个类IDNumber有个属性address, 以及一个get方法:
def getAddress() {
if (address) return address
else return new Address()
}

因为在生成JSON的逻辑中, 是优选根据GET方法来读取的, 当address==null的时候, 会它就会去生成一个新的address对象, 然后再继续去读address中的内容, 因为address中也有类似的逻辑, 因为每次都是重新new 的一个对象, 这样, 每个对象的hash都不一样, 所以导致, json在做引用检测的时候不会检测出来. 从面导致的逻辑上的循环.

因为json是做为序列化的, 所以觉得, 直接保存其属性的值, 而不是根据get来读取会更加合理一些, 所以在这里建议将json中取值的逻辑改成直接读取.