GSON 循环引用的对象转为 JSON 造成栈溢出

319 阅读1分钟

今天在项目中,使用GSON对某个类进行toJson操作,发现栈溢出异常。

java.lang.StackOverflowError: null at com.google.gson.stream.JsonWriter.writeDeferredName(JsonWriter.java:402) ~[gson-2.8.2.jar:?] at com.google.gson.stream.JsonWriter.beginObject(JsonWriter.java:307) ~[gson-2.8.2.jar:?] at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.write(ReflectiveTypeAdapterFactory.java:238) ~[gson-2.8.2.jar:?] at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:69) ~[gson-2.8.2.jar:?]

分析了一下异常出现的原因:    

    在java中,对象引用成环问题,可以被jvm自动处理,但是将java对象转成json格式时,由于转换工具不能自行切断环,会导致无限解析最终会导致栈溢出错误。 解决办法:使用JackSon