1

问题产生

最开始问题是在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...


喵先生的进阶之路
348 声望21 粉丝