【问题标题】:Gson StackOverflowErrorGson StackOverflowError
【发布时间】:2012-11-08 17:33:47
【问题描述】:

我有一个简单的返回类,它要么接受异常,要么接受我们的业务对象之一。如果 REST Web 服务方法抛出异常,它会捕获它并在响应中设置异常。如果没有,它会在响应中设置返回值并序列化它。

在我的例子中,我得到了一个 InvocationTargetError ,它包装了我们的一个服务异常。我在我的返回类的异常上设置了它并获得以下堆栈跟踪:

java.lang.StackOverflowError
com.google.gson.reflect.TypeToken.hashCode(TypeToken.java:280)
java.util.HashMap.get(HashMap.java:300)
java.util.Collections$SynchronizedMap.get(Collections.java:1975)
com.google.gson.Gson.getAdapter(Gson.java:337)
com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:55)
com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.write(ReflectiveTypeAdapterFactory.java:89)
com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.write(ReflectiveTypeAdapterFactory.java:195)
com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:68)
com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.write(ReflectiveTypeAdapterFactory.java:89)
com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.write(ReflectiveTypeAdapterFactory.java:195)
com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:68)
com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.write(ReflectiveTypeAdapterFactory.java:89)
com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.write(ReflectiveTypeAdapterFactory.java:195)
and so on...

有人有什么想法吗?这看起来像是 Gson 2.2.2 中的错误。

【问题讨论】:

标签: java json gson


【解决方案1】:

我在谷歌代码网站上为此创建了一个问题。

http://code.google.com/p/google-gson/issues/detail?id=488

【讨论】:

    【解决方案2】:

    Gson 无法处理序列化数据中的循环引用。很有可能你有一个。修复它,你的问题就解决了。

    【讨论】:

    • 原来所有异常都有循环引用。谁会想的。想不出来。
    • 那么如何...“解决这个问题”?用户对象包含用户(您关注的人)的数组列表,这是一种设计。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-15
    • 2017-02-26
    • 2013-01-07
    • 2014-09-09
    相关资源
    最近更新 更多