Jackson auto referência levando a ciclo
Eu tenho um problema ao converter objetos de hibernação para JSON com Jackson, porque alguns objetos têm uma auto-referência em sua definição. O problema é que não controlo o código dessas entidades, por isso não posso colocar anotações lá.
Na verdade, gostaria apenas de limitar a profundidade da recursividade, por exemplo, para 5 níveis. Preciso de código genérico que funcione com qualquer objeto de entidade que contenha referência própria. É possível? Não me importo de usar outra biblioteca JSON.
O seguinte código simples
<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>
Me dá uma exceção:
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)
Agradecemos antecipadamente por qualquer sugestão!