86403969 2019-06-28
最开始问题是在C层的单元测试中产生的:
报错提示我们说:引用瞬态值,引用之前应该保存一下。
1.这好说,一看是minMeasureScaleUnit
没有保存,那么保存一下就行了。然而没有用。
2.既然不起作用,那么说明这是别的方式引起的。断点调试一下。
发现在模拟发起http请求
之前,minMeasureScaleUnit
的值是存在的,并且已经保存,但是传到方法中的时候就出问题了,minMeasureScaleUnit
成一个空对象了。这就说明在转换成json字符串
的时候出现问题了。
然后,断点看一下转换的内容,找到minMeasureScaleUnit
:
看到这里突然想起这个好像前面有遇到过,下面简单说下产生问题的原因:
$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...