使用 Jackson 将休眠对象转换为 JSON 时出现问题,因为某些对象在其定义中具有自引用。问题是我不控制这些实体的代码,所以我不能把注释放在那里。
实际上,我只想将递归的深度限制为 5 个级别。我需要适用于任何包含自引用的实体对象的通用代码。这可能吗?我不介意使用另一个 JSON 库。
以下简单代码
ObjectMapper mapper = new ObjectMapper();
Query q = session.createQuery("from Hazard ");
List<Hazard> hazards = q.list();
for (Hazard h : hazards) {
String hazardJson;
hazardJson = mapper.writeValueAsString(h);
}
给我一个例外:
org.codehaus.jackson.map.JsonMappingException:直接自引用导致循环(通过引用链:com.fgm.imsma.pojo.Hazard["location"]->com.fgm.imsma.pojo.Location["location "]) 在 org.codehaus.jackson.map.ser.BeanPropertyWriter._reportSelfReference(BeanPropertyWriter.java:473) 在 org.codehaus.jackson.map.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:411) 在 org.codehaus.jackson.map.ser.BeanSerializer.serializeFields(BeanSerializer.java:245) 在 org.codehaus.jackson.map.ser.BeanSerializer.serialize(BeanSerializer.java:212) 在 org.codehaus.jackson.map.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:428) 在 org.codehaus.jackson.map.ser.BeanSerializer.serializeFields(BeanSerializer.java:245) 在 org.codehaus.jackson.map.ser.BeanSerializer.serialize(BeanSerializer.java:212) 在 org.codehaus.jackson.map.ser.StdSerializerProvider._serializeValue(StdSerializerProvider.java:587) 在 org.codehaus.jackson.map.ser.StdSerializerProvider.serializeValue(StdSerializerProvider.java:245) 在 org.codehaus.jackson.map.ObjectMapper._configAndWriteValue(ObjectMapper.java:1993) 在 org.codehaus.jackson.map.ObjectMapper.writeValueAsString(ObjectMapper.java:1595) 在 imsma.json.GetObjects.main(GetObjects.java:47)
在此先感谢您的任何建议!