2016-07-05 1 views
0

Я пытаюсь получить JSON объект от объекта, но он терпит неудачу с исключением нижеJAVA - JSON - Удалить циклическую зависимость без изменения Entity

at org.codehaus.jackson.map.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:446) 
at org.codehaus.jackson.map.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:150) 

Вы искали в Интернете и решений, предлагаемых в @JSONIgnore, @JSONBackReference но мой проект настолько огромен, что я не могу позволить себе изменить существующую сущность.

Есть ли какой-то другой способ, по которому мы можем избежать циклической зависимости и получить правильную строку json от объекта?

+0

http://stackoverflow.com/questions/13764280/how-do-i-exclude-fields-with-jackson-not-using-annotations –

+0

Спасибо Amit, но здесь мы также определяем конкретные поля или добавляем аннотации к классам POJO, которые я не хочу делать. – monika

ответ

0

я мог бы решить эту проблему с помощью Gson ExclusionStrategy ниже

class MyExclusionStrategy implements ExclusionStrategy { 
Set<String> encounteredClasses = new HashSet<String>(); 

public boolean shouldSkipField(FieldAttributes fa) { 
    return false; 
} 

@Override 
public boolean shouldSkipClass(Class<?> type) { 
    System.out.println(encounteredClasses); 
    if (encounteredClasses.contains(type.getSimpleName().toString())) { 
     return true; 
    } if (type.isAnnotationPresent(Entity.class)) { 
     encounteredClasses.add(type.getSimpleName().toString()); 
    } 
    return false; 
}} 

Здесь он будет держать добавление уже встретившиеся классы к набору и если сталкивается с теми же снова, что бы пропустить.

Смежные вопросы