我正在编写一个序列化程序来将 POJO 序列化为 JSON,但遇到了循环引用问题。在 hibernate 双向一对多关系中,父引用子和子引用返回父,这里我的序列化器死了。 (参见下面的示例代码)
如何打破这个循环?我们能否获取对象的所有者树以查看对象本身是否存在于其自己的所有者层次结构中的某个位置?还有其他方法可以确定引用是否是循环的?或任何其他想法来解决这个问题?
最佳答案
我依赖 Google JSON使用该功能来处理此类问题
假设A类和B类之间的双向关系如下
public class A implements Serializable {
private B b;
}
和B
public class B implements Serializable {
private A a;
}
现在使用 GsonBuilder 来获取自定义的 Gson 对象如下(注意 setExclusionStrategies 方法)
Gson gson = new GsonBuilder()
.setExclusionStrategies(new ExclusionStrategy() {
public boolean shouldSkipClass(Class<?> clazz) {
return (clazz == B.class);
}
/**
* Custom field exclusion goes here
*/
public boolean shouldSkipField(FieldAttributes f) {
return false;
}
})
/**
* Use serializeNulls method if you want To serialize null values
* By default, Gson does not serialize null values
*/
.serializeNulls()
.create();
现在我们的循环引用
A a = new A();
B b = new B();
a.setB(b);
b.setA(a);
String json = gson.toJson(a);
System.out.println(json);
看看GsonBuilder类
关于java - 如何解决 hibernate 双向映射导致的json序列化器中的循环引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3340485/