1

一直在使用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 类已编译,因此我无法对它们进行任何更改。
任何人都知道我仍然可以使用 IDMLlib 返回的 java 对象而无需创建自己的方法吗?

编辑:
似乎在整个过程中都提到了“根”和“父”。所以基本上我要问的是是否有人知道如何能够序列化对象而不修改它

4

2 回答 2

0

当由于某些原因无法访问对象的某个属性或无法序列化其某个属性时,Jackson 倾向于抛出这种异常。

如果您没有在要序列化的对象上指定任何注释,杰克逊会尝试通过深入递归来序列化所有内容。

您是否有机会告诉杰克逊忽略某些属性或字段?

我有使用 Hibernate 初始化 Pojo 的经验,我应该将“@JacksonIgnore”添加到我使用 Hibernate 延迟加载的每个属性中。

于 2012-10-02T12:46:50.480 回答
0

如果引用是一个简单的父/子类型的东西(听起来很像),只需使用注释:

// on parent object
@JsonManagedReference
public ChildOb child;

// on child object
@JsonBackReference ParentOb parent;

杰克逊将序列化事物,以便只写出“孩子”(父母没有);反序列化时,它会重新链接事物。

于 2012-10-02T21:19:45.533 回答