最近在生产环境出现了对账不平的问题,锁定到了交易之后查看日志,发现交易金额在传输过程中出现了丢失精度的问题,通过本地debug发现,是net.sf.json在将json字符串转换成JSONObject的时候,将数据值没有加双引号的金额字段识别成了浮点型,并且在转换过程中,丢失了精度。
经过网上资料的查询和尝试,通过以下方法对这个问题进行了解决。
由于项目已经投产运行,当然要以最小的改动解决根本问题。
引入新的json处理包,alibaba的fastjson。当然并不需要推翻原有的net.sf.json,只是在将json字符串转换成object的地方修改即可,代码如下:
com.alibaba.fastjson.JSONObject obj1= com.alibaba.fastjson.JSONObject.parseObject(plain);
// JSONObject obj= JSONObject.fromObject(plain); //替换掉这一行
这样,如果你后面用到了JSONObject的这个obj,那你可以不用注释它,只是在给model赋值的时候用fastjson的obj1里面的金额字段就可以了
maven注入fastjson
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.4</version>
</dependency>