fastjson format成string,出现ref引用的坑

问题描述:

在我的代码中,把body转成string放到HttpEntity里面然后去call第三方的接口。发现有些数据并没有传过去。所以check发现,fastjson默认开启了循环检查,一样的数据结构就折叠起来了。网上说是为了避免StackOverflowError,,,我选择不相信。。。这就是一个大坑啊。还有我把request的body也format成string存在日志表里面,也有这样的问题。
HttpEntity entity = new HttpEntity<>JSON.toJSONString(paramsMap), headers);
醉了,在源码的注释里面也没有说明一下这个问题,对于使用者来说,只会看到方法名来理解这个方法的功能,对于比较特殊的特性,应该要在注释里面说明至少。
在这里插入图片描述

复盘

我写了一个简单的demo

@Test
    public void test1(){
        List list = new ArrayList<>();
        User user = new User();
        user.setGender("man");
        user.setId("1");
        user.setName("Allen");
        list.add(user);
        list.add(user);
        System.out.println(JSON.toJSONString(list));
    }

结果:

[{"gender":"man","id":"1","name":"Allen"},{"$ref":"$[0]"}]

可以看到一样的data structure,就只是打印出了引用而已。要打印出完整的json需要关闭循环引用。

System.out.println(JSON.toJSONString(list, SerializerFeature.DisableCircularReferenceDetect));

再跑一次:

[{"gender":"man","id":"1","name":"Allen"},{"gender":"man","id":"1","name":"Allen"}]

这下就可以了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值