以下代码用于Java 11:
new Gson().toJson(new Exception())
在JDK 17上,我收到以下错误:
Unable to make field private java.lang.String java.lang.Throwable.detailMessage accessible: module java.base does not "opens java.lang" to unnamed module @147ed70f
通过阅读this page,我想我可以用--add-opens java.base/java.lang=ALL-UNNAMED
来解决它。但是有没有更好的方法?也许用一个自定义的反序列化器?
2条答案
按热度按时间ltskdhd11#
下面是我添加的代码,用于对异常进行反序列化。这可以用在如下的类中:
而另一个则调用
result.error.toThrowable()
。n3schb8v2#
我昨天有这个。我当时用的是Java 17。我回到Java 11,它运行得很好。
我想是因为这样:https://bugs.openjdk.java.net/browse/JDK-8256358
我很懒,使用的是GSON默认的反射类型适配器。
您必须实现自己的TypeAdapter来修复它。或者使用另一个JSON反序列化器,如Jackson,我可能稍后会这样做。