为了账号安全,请及时绑定邮箱和手机立即绑定

如何解决由休眠双向映射导致的json序列化器中的循环引用?

如何解决由休眠双向映射导致的json序列化器中的循环引用?

互换的青春 2019-11-26 11:06:00
我正在编写一个序列化程序以将POJO序列化为JSON,但陷入循环引用问题。在休眠的双向一对多关系中,父级引用子级,而子级引用又回到父级,此时我的序列化程序死亡。(请参见下面的示例代码)如何打破这个循环?我们可以获取对象的所有者树以查看对象本身是否存在于其所有者层次结构中的某个位置吗?还有其他方法可以找到参考是否为圆形吗?或任何其他想法来解决这个问题?
查看完整描述

3 回答

?
跃然一笑

TA贡献1826条经验 获得超6个赞

我依靠Google JSON通过使用The feature处理此类问题


从序列化和反序列化中排除字段


假设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类


查看完整回答
反对 回复 2019-11-26
  • 3 回答
  • 0 关注
  • 477 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信