使用 Jackson 序列化 Javaparser 对象 Json

Serialize Javaparser objects with Jackson Json

我正在尝试使用 Jackson JSON 序列化 Javaparser 对象,但它非常复杂,因为它是第三方库(我不能 change/annotate 代码)并且存在循环依赖在里面。

我的项目结构如下:

对象 Analysis 包含一些 WrappedNode 的列表,这些列表可能相互引用。每个 WrappedNode 包含一个 JavaParser CallableDeclaration.

当我尝试映射我的 Analysis 时,出现错误:

JsonMappingException: Infinite recursion (WhosebugError) (through reference chain: com.github.javaparser.metamodel.PropertyMetaModel["containingNodeMetaModel"]->com.github.javaparser.metamodel.SimpleNameMetaModel["declaredPropertyMetaModels"]->java.util.ArrayList[0]->com.github.javaparser.metamodel.PropertyMetaModel["containingNodeMetaModel"]...

所以,为了摆脱无限递归,我知道我必须使用 @JsonIdentityInfo(generator=ObjectIdGenerators.IntSequenceGenerator.class, property="@id"),这是我在 WrappedNode class 上所做的,但我认为我还应该注释JavaParser classes 使用 Mix-in annotations.

问题是字段很多,classes很多,不知道要注解哪些

感谢您的帮助!

你可以直接使用JavaParser提供的JsonPrinter class。这是最近添加的(我认为是从 3.2.8 版开始的),它可能并不完美,但你可以超级、超级轻松地使用它