美文网首页json
jackson循环引用解决

jackson循环引用解决

作者: ZhengShaoJian | 来源:发表于2019-05-14 16:03 被阅读0次

先介绍背景,采用springboot + jpa.User跟Role互相引用,如下图:

基类 用户类 角色类 用户,角色数据库数据

web端返回时,@ResponseBody会通过jackson将对象转化为json返回,导致循环引用:

接口信息 返回用户异常 返回角色异常

导致出现循环引用的原因:通过查看返回的html数据可以发现,User跟Role互相引用,所以只要切断互相引用就行.

这里介绍两种解决方法:

方法一:分别在User和Role相关关系属性上添加@JsonIgnoreProperties,对引用的对象进行属性过滤,例如:在User类中,过滤属性roles对应的对象Role中的user属性,就能切断循环引用,有点绕口,具体看下面实现

用户添加@JsonIgnoreProperties 角色添加@JsonIgnoreProperties

其他不变,看返回数据:

返回用户正常 返回角色正常

正常,方法一通过.

方法二:在User和Role类上添加@JsonIdentityInfo,将自动过滤

用户添加@JsonIdentityInfo 角色添加@JsonIdentityInfo 返回用户正常 返回角色正常

方法二测试通过,甚至可以过分点,User和Role的@JsonIdentityInfo去掉,直接在基类BaseEntity添加

基类添加@JsonIdentityInfo

效果一样,

评价下上面两个方法:

方法一灵活,但是分布在属性上,多了会显得杂乱,方法二如果是jpa,hibernate下全局通用,建议方法二跟方法一都要熟悉.

获取角色列表接口中,两个方法返回的数据是有差异的,方法二本质上不是切断相互引用,而是防止重复引用相同的对象

相关文章

  • jackson循环引用解决

    先介绍背景,采用springboot + jpa.User跟Role互相引用,如下图: web端返回时,@Resp...

  • iOS定时器循环引用分析及完美解决方案

    目录 1.NSTimer导致的循环引用分析2.NSTimer循环引用解决思路误区3.NSTimer循环引用解决方案...

  • ARC 下内存泄露的那些点

    block 解决循环引用 这样确实解决了循环引用,但考虑另一种情况。 这时,虽然循环引用解决了,但是异步打印却没有...

  • iOS基础 Block解决循环引用

    block 循环引用循环引用 A对象持有B,B又持有A,互相强引用 解决循环引用问题:ARC 和MRC ARC:...

  • 如何在 iOS 中解决循环引用的问题

    如何在 iOS 中解决循环引用的问题 如何在 iOS 中解决循环引用的问题

  • iOS 内存管理面试题(循环引用)

    循环引用 循环引用的实质:多个对象相互之间有强引用,不能释放让系统回收。 如何解决循环引用? 1、避免产生循环引用...

  • iOS内存管理

    swift 中如何解决循环引用 解决类之间的循环引用 weak:弱引用, 必须为变量(var),可选类型(?),指...

  • Day2

    1 单方向的引用不会产生循环引用。循环引用:闭包引用了self,self引用了闭包。Swift推荐使用解决循环引用...

  • iOS-底层原理(11)-block-循环引用详解

    循环引用问题 循环引用代码例子如下 运行结果如下 解决循环引用问题 - ARC 用__weak、__unsafe_...

  • 11 block-循环引用详解

    循环引用问题 循环引用代码例子如下 运行结果如下 解决循环引用问题 - ARC 用__weak、__unsafe_...

网友评论

    本文标题:jackson循环引用解决

    本文链接:https://www.haomeiwen.com/subject/iebsaqtx.html