JSON转换器 - 堆栈溢出

时间:2010-06-23 15:37:30

标签: grails groovy json

我正在尝试将域类转换为JSON。

def converter = null
try{
  converter = events as JSON
} catch(e) {
  log.error "error during conversion to JSON"
  log.error e
}
return converter.toString()

我总是收到这个错误:

    org.codehaus.groovy.grails.web.servlet.mvc.exceptions.ControllerExecutionException: Executing action [findEvents] of controller 
[com.geoadapta.geodata.DataAccessJsonController]  caused exception: 
java.lang.StackOverflowError
        at java.lang.Thread.run(Thread.java:619)
    Caused by: org.codehaus.groovy.runtime.InvokerInvocationException: java.lang.StackOverflowError
        ... 1 more
    Caused by: java.lang.StackOverflowError
        at org.codehaus.groovy.util.AbstractConcurrentMap.getOrPut(AbstractConcurrentMap.java:20)
        at grails.converters.JSON.value(JSON.java:188)
        at grails.converters.JSON.convertAnother(JSON.java:160)
        at grails.converters.JSON.value(JSON.java:192)
    // hundreds of times
        at grails.converters.JSON.value(JSON.java:192)
        at grails.converters.JSON.convertAnother(JSON.java:160)
        at grails.converters.JSON.value(JSON.java:192)
        at grails.converters.JSON.convertAnother(JSON.java:160)
        at grails.converters.JSON.value(JSON.java:192)
        at grails.converters.JSON.convertAnother(JSON.java:160)
        at grails.converters.JSON.value(JSON.java:192)
        at grails.converters.JSON.convertAnother(JSON.java:160)
        at grails.converters.JSON.value(JSON.java:192)
        at grails.converters.JSON.convertAnother(JSON.java:160)
        at grails.converters.JSON.value(JSON.java:192)
    2010-06-23 16:21:28,390 [http-8080-1] DEBUG [/GeoAdaptaApp].[grails]  -  Disabling the response for futher output

这是域类:http://www.copypastecode.com/31527 我能看到的唯一问题是'上下文'参考。但即使我设置为'null',我仍然会得到堆栈溢出。

我的转换器没有传播循环引用。 我想调试它,找出导致问题的属性,但到目前为止还没有运气。 任何提示?

干杯

1 个答案:

答案 0 :(得分:1)

很抱歉,我希望将其添加为评论,但还没有代表添加评论。

在你的域类中,听起来有几个类延伸到这个类,你如何填充'events'对象?由于您说上下文设置为null并且这是唯一直接定义的关系,因此结果中的非预期子类列表会让您想到如何进入如此深入的递归场景。

要解决当前问题,以便进行一些调试,请尝试调用:

converter.setRenderDomainClassRelations(false)