Could not write JSON: Infinite recursion (StackOverflowError)解决办法

本文探讨了在系统管理中,用户与角色多对多关系下,JSON序列化时出现的死循环问题。通过在低频使用的属性上应用@JsonIgnore注解,成功避免了无限递归序列化。

以系统管理中,用户和角色多对多的关系为例

问题部分代码:

UserEntity:

@ManyToMany
	@JoinTable(name = "user_role", joinColumns = {@JoinColumn(name = "user_id", referencedColumnName = "id", columnDefinition = ("int COMMENT '用户id'"))}, inverseJoinColumns = {@JoinColumn(name = "role_id", referencedColumnName = "id", columnDefinition = ("int COMMENT '角色id'"))})
	private Set<RoleEntity> roleEntitySet;

RoleEntity:

@ManyToMany(mappedBy = "roleEntitySet")
	private Set<UserEntity> userEntitySet;

Controller:

@RequestMapping(value = "/list")
	public Object list() {
		return userJpa.findAll();
	}

问题原因:

在json序列化UserEntity的时候,发现RoleEntity并去序列化,在序列化RoleEntity的时候,发现有UserEntity又去序列化,导致死循环

解决办法:

在死循环的属性中挑一个使用率较低的,前面加@JsonIgnore,不让他json序列化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wheat_Liu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值