FastJson转换字符串引用相同对象产生的错误

问题产生

最开始问题是在C层的单元测试中产生的:

clipboard.png

报错提示我们说:引用瞬态值,引用之前应该保存一下。

问题解决

1.这好说,一看是minMeasureScaleUnit没有保存,那么保存一下就行了。然而没有用。

2.既然不起作用,那么说明这是别的方式引起的。断点调试一下。

发现在模拟发起http请求之前,minMeasureScaleUnit的值是存在的,并且已经保存,但是传到方法中的时候就出问题了,minMeasureScaleUnit成一个空对象了。这就说明在转换成json字符串的时候出现问题了。

然后,断点看一下转换的内容,找到minMeasureScaleUnit

clipboard.png

看到这里突然想起这个好像前面有遇到过,下面简单说下产生问题的原因:

$ref这代表了是一种引用,它是 FastJson在转换 Json字符串的时候出现的,在引用了同一对象时出现。
$”代表根对象,所以后面就是告诉我们引用了哪个对象。
当后台接收这种形式的 Json对象的时候,并没有将引用再替换回来,所以 minMeasureScaleUnit就不是我们最开始的对象了,也就出现了最开始的没有保存的问题。

解决办法

FastJson已经提供给我们了解决办法,在转换的时候,添加一个参数SerializerFeature.DisableCircularReferenceDetect,禁用引用就行了:

String jsonObject = JSON.toJSONString(newNonMandatoryInstrument, SerializerFeature.DisableCircularReferenceDetect);

总结

这个问题前面的时候遇到过,但是没有及时的复习,导致这次解决问题的时候又用了不少的时间。


参考链接:
https://github.com/json-schem...
https://blog.csdn.net/wxwzy73...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值