先介绍背景,采用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
效果一样,
评价下上面两个方法: