我有这个例外
Caused by: java.lang.StackOverflowError
at java.util.ArrayList.get(ArrayList.java:322)[:1.6.0_12]
at com.google.gson.stream.JsonWriter.peek(JsonWriter.java:354)
尝试将Exception对象转换为Json Text时,如下面的代码
Exception exception = new Exception("Test");
String gsonText = gson.toJson(exception);
答案 0 :(得分:2)
你得到一个StackOverflowError,因为异常的cause实例成员变量被初始化为它自己。序列化程序尝试遍历对象并且永远不会完成,因为它始终遵循对原因的引用。
有一个message on the GSON google group describing this problem,建议的解决方案是:
所以,你有三个(独家)选择:
1)如果您要序列化自己的例外,请修改所有例外 将cause设置为null或传递参数的异常 构建。
2)对任何返回的异常调用initCause(null) 来自getCause()的(null)(最终可能会得到一些IllegalStateExceptions 在这里)
3)编写自己的Serializer,调用getCause() 而不是试图取消引用“原因”字段。
此外,尝试通过线路发送序列化的异常代码可能 有点像非正统的设计选择。
通常,对应用程序开发人员的建议是不向客户端显示堆栈跟踪,因此我建议在异常上调用toString,或者将异常映射到服务器端的消息并发送消息。