使用IDMLlib将IDML文件加载到POJO,但是当我尝试使用Jackson JSON将生成的java对象序列化为JSON时,我一直遇到无限递归问题。
Caused by JsonMappingException: Infinite recursion (StackOverflowError)
(through reference chain:
de.fhcon.idmllib.api.elements.preferences.Preferences["layoutAdjustmentPreference"]
->de.fhcon.idmllib.api.elements.preferences.LayoutAdjustmentPreference["parent"]
... etc
->> 539 | serializeFields in com.fasterxml.jackson.databind.ser.std.BeanSerializerBase
在解析过程中会发生多次发生 Idml.document - > Document.root - > Idml.document - > Document.root是一个类似的。
我使用Jackson的ObjectMapper将POJO转换为JSON:
Idml idml = new Idml("test.idml");
ObjectMapper mapper = new ObjectMapper();
String JSONstring = mapper.writeValueAsString(idml);
编译IDMLlib类,因此我无法对它们进行任何更改 任何人都知道一种方法我仍然可以使用java对象IDMLlib返回而不必创建自己的?
编辑:
似乎有很多提及" root"和父母"始终。基本上我要问的是,如果有人知道如何在不修改对象的情况下序列化对象
答案 0 :(得分:0)
由于某些原因,杰克逊无法访问该对象的某个属性,或者无法序列化其中一个属性,因此杰克逊倾向于抛出此类异常。
如果你没有在要序列化的对象上指定任何注释,杰克逊会尝试通过深入到递归来序列化所有内容。
你有没有机会告诉杰克逊忽略某些属性或领域?
我有过使用Hibernate初始化Pojo的经验,我应该将“@JacksonIgnore”添加到我使用Hibernate Lazy加载的每个属性中。
答案 1 :(得分:0)
如果引用是一个简单的父/子类型的东西(它听起来像是),只需使用注释:
// on parent object
@JsonManagedReference
public ChildOb child;
// on child object
@JsonBackReference ParentOb parent;
杰克逊将序列化事物,以便只写出“孩子”(父母不会);当反序列化时,它会重新链接。