Сам Джексон, ведущий к циклу


У меня есть проблема при преобразовании объектов гибернации в JSON с Джексоном, потому что некоторые объекты имеют собственную ссылку в своем определении. Проблема в том, что я не контролирую код этих объектов, поэтому я не могу помещать туда аннотации.

На самом деле я хотел бы просто ограничить глубину рекурсивности, например, до 5 уровней. Мне нужен универсальный код, который работает с любым объектом, который содержит ссылку на себя. Возможно ли это? Я не возражаю против использования другой библиотеки JSON.

Следующий простой код

<code>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);
}
</code>

Дает мне исключение:

org.codehaus.jackson.map.JsonMappingException: Direct self-reference leading to cycle (through reference chain: com.fgm.imsma.pojo.Hazard["location"]->com.fgm.imsma.pojo.Location["location"])
    at org.codehaus.jackson.map.ser.BeanPropertyWriter._reportSelfReference(BeanPropertyWriter.java:473)
    at org.codehaus.jackson.map.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:411)
    at org.codehaus.jackson.map.ser.BeanSerializer.serializeFields(BeanSerializer.java:245)
    at org.codehaus.jackson.map.ser.BeanSerializer.serialize(BeanSerializer.java:212)
    at org.codehaus.jackson.map.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:428)
    at org.codehaus.jackson.map.ser.BeanSerializer.serializeFields(BeanSerializer.java:245)
    at org.codehaus.jackson.map.ser.BeanSerializer.serialize(BeanSerializer.java:212)
    at org.codehaus.jackson.map.ser.StdSerializerProvider._serializeValue(StdSerializerProvider.java:587)
    at org.codehaus.jackson.map.ser.StdSerializerProvider.serializeValue(StdSerializerProvider.java:245)
    at org.codehaus.jackson.map.ObjectMapper._configAndWriteValue(ObjectMapper.java:1993)
    at org.codehaus.jackson.map.ObjectMapper.writeValueAsString(ObjectMapper.java:1595)
    at imsma.json.GetObjects.main(GetObjects.java:47)

Спасибо заранее за любые предложения!

Ответы на вопрос(1)

Ваш ответ на вопрос