2016-07-05 14 views
0

我试图从对象获取一个JSON对象,但它不能与下面的异常JAVA - JSON - 删除循环依赖不改变实体

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

感谢阿米特,但在这里我们也要么定义特定领域或添加注释到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; 
}} 

这将不断增加已经遇到类以一组,如果遇到同样的再次解决这个问题,它会跳过。