(二)碎碎念接口优化--fastjson版本兼容问题
2017-04-19 17:49
555 查看
最近线上项目出现了gc异常(下篇详细介绍),后来知道fastjson存在漏洞,项目用的是旧的版本1.1.45版本,为了增加安全性,对fastjson进行了版本升级。结果出现更多的问题,客户端阅读器所有接口几乎全部挂掉。
自己app的客户端没有影响,但是一部分阅读器接口对json无法解析,查看原因,是因为fastjson版本升级到了1.2.28,而新的版本有新的特性。
1 、接口参数结构不变的情况下,参数的位置改变,app端解析json是正规的解析方式,而阅读器端解析json采用的正则表达式解析,这样就灾难了。
2 、新版本的fastjson对double float 类型精度处理和旧版本不一致。
代码如下
JSONObject jsonObject = new JSONObject();
Double dou = new Double(5.0);
jsonObject.put("dou", dou);
System.out.println(JSON.toJSONString(jsonObject));
旧版本输出{"dou", 5},因为结尾的.0 被截掉了,而新版本更加正式了,会输出{"dou",5.0},但对于阅读器采用正则表达式截取字段,就会出问题。
综上
客户端最好把全部关于业务逻辑的部分放到服务端,以便能扩展和修改。客户端一旦发版后,有些东西就写死了,所以客户端在做的时候也要想到兼容性问题。对于某些返回值的解析,如论是json还是xml,最好使用标准的方式解析,不要用正则表达式解析,太不灵活了。
自己app的客户端没有影响,但是一部分阅读器接口对json无法解析,查看原因,是因为fastjson版本升级到了1.2.28,而新的版本有新的特性。
1 、接口参数结构不变的情况下,参数的位置改变,app端解析json是正规的解析方式,而阅读器端解析json采用的正则表达式解析,这样就灾难了。
2 、新版本的fastjson对double float 类型精度处理和旧版本不一致。
代码如下
JSONObject jsonObject = new JSONObject();
Double dou = new Double(5.0);
jsonObject.put("dou", dou);
System.out.println(JSON.toJSONString(jsonObject));
旧版本输出{"dou", 5},因为结尾的.0 被截掉了,而新版本更加正式了,会输出{"dou",5.0},但对于阅读器采用正则表达式截取字段,就会出问题。
综上
客户端最好把全部关于业务逻辑的部分放到服务端,以便能扩展和修改。客户端一旦发版后,有些东西就写死了,所以客户端在做的时候也要想到兼容性问题。对于某些返回值的解析,如论是json还是xml,最好使用标准的方式解析,不要用正则表达式解析,太不灵活了。
相关文章推荐
- (一)碎碎念接口优化--新代码提交问题
- APP接口版本兼容的问题
- APP接口版本兼容的问题 - 云端梦想 - 博客园
- 关于优化在兼容IE低版本的问题
- fastjson: Release版本混淆异常问题
- IE浏览器JSON不兼容问题及浏览器版本问题解决
- APP接口版本兼容的问题
- Springboot使用FastJson后,接口返回中文乱码的问题解决(两种解决方式)
- 遇到版本兼容问题时 Newtonsoft.Json
- ajaxfileupload_v.js 解决js版本不兼容,多文件上传不解析json的问题
- Springboot使用FastJson后,接口返回中文乱码的问题解决。
- 关于写接口 FastJson 输出json结果集 大小写问题
- Springboot使用FastJson后,接口返回中文乱码的问题解决。
- 【Android性能优化】(二)高低版本兼容问题
- HessianCSharp 1.3.3版本前使用泛型以及接口interface继承问题解决方案!!(实例代码)
- IE浏览器各版本与web标准不兼容问题解决方案
- 历史版本兼容问题 - 使用枚举值带来的潜在风险
- Delphi2009和2010与以前版本的不兼容问题
- Android 版本兼容问题(一)
- JDK版本不兼容问题之:一台机器安装多个版本的JDK