一部のオブジェクトの定義に自己参照があるため、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) で
提案をお寄せいただきありがとうございます。