使用 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 版开始的),它可能并不完美,但你可以超级、超级轻松地使用它
我正在尝试使用 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 版开始的),它可能并不完美,但你可以超级、超级轻松地使用它