jackson的Infinite recursion (StackOverflowError)

1. 絮絮叨叨

  • 之前,都是使用fastjson做json相关的处理,使用起来也得心应手,什么Java对象和json对象、Java对象和json字符串、json字符串和json对象之间的互转十分熟悉

  • 最近,项目开发时改成了jackson。自己一下蒙了,连如何将Java对象转json字符串都不知道 😂

  • 没法,还是得依靠百度,最终百度后的代码如下:

    ObjectMapper objectMapper = new ObjectMapper();
    String jsonContent = objectMapper.writeValueAsString(entity);
    
  • 但是,这个别人写的entity有一个self-reference,大概示例如下:

    public class User {
    	private String name;
    	private List<User> partners;
    
    	....
    }
    
  • 就是,类A中有一个成员属性List,这样形成了self - reference,也是一种循环引用

  • 这样的引用,使用objectMapper.writeValueAsString(entity);获取json字符串时,会出现Infinite recursion (StackOverflowError)错误

    *** java.lang.instrument ASSERTION FAILED ***: "!errorOutstanding" with message transform method call failed at JPLISAgent.c line: 844
    *** java.lang.instrument ASSERTION FAILED ***: "!errorOutstanding" with message transform method call failed at JPLISAgent.c line: 844
    *** java.lang.instrument ASSERTION FAILED ***: "!errorOutstanding" with message transform method call failed at JPLISAgent.c line: 844
    2021-03-09T12:38:42.047+0800	Infinite recursion (StackOverflowError) (through reference chain: com.google.common.collect.SingletonImmutableList[0]->execution.StageInfo["allStages"]->com.google.common.collect.SingletonImmutableList[0]->execution.StageInfo["allStages"]->com.google.common.collect.SingletonImmutableList[0]-> ...
    

2. 使用@JsonIdentityInfo解决问题

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值