记开发时遇到的两个问题以及解决方案
来源:互联网 发布:linux主机 编辑:程序博客网 时间:2024/06/06 01:35
记开发时遇到的两个问题以及解决方案
今天说两个平时工作中遇到的两个小问题,以及解决方案,ps:当时还是花了不少时间找原因的,现在记录下来,没事的时候自己翻翻,如果能帮助到小伙伴那就更好了!
问题一(字节编码):
出现场景:
- 在单元测试spring的service是否能够使用时,出现以下问题
问题描述:
FactoryBean threw exception on object creation; nested exception is java.lang.RuntimeException: java.io.IOException: invalid constant type: 15
产生原因:
- 本机jdk版本为: 1.8.0_112,项目中使用jdk版本是: 1.7.0, 2.经查找,2.8.4的dubbo版本中的包含了javassist-3.15.0-GA版本,而该版本不兼容jdk1.8导致。
解决办法:
方法一: 设置运行该项目的版本为1.7.x版本即可。
方法二:
步骤一: 在maven中将dubbo中的版本排除掉:
<dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <exclusions> <exclusion> <artifactId>org.javassist</artifactId> <groupId>javassist</groupId> </exclusion> </exclusions></dependency>
步骤二: 添加org.javassist: 3.18.0-GA及以上的依赖即可使用:
<dependency> <groupId>org.javassist</groupId> <artifactId>javassist</artifactId> <version>3.18.0-GA</version></dependency>
如果版本为:3.17.0-GA 则会错误信息:
FactoryBean threw exception on object creation; nested exception is java.lang.RuntimeException: Inconsistent args count operand in invokeinterface
问题二(js Number精度问题)
出现场景:
在写Rest接口提供给移动网页端使用时,出现由于数据精度问题,导致数据丢失的现象。当时返回的结果是这样的:
(格式化前):
{ "respObj": { "oid": 362900267898773544 }, "errorCode": null, "success": true}
其中oid在Java中对应的为Long类型,返回给前端时候格式化后,返回的结果为: (格式化后):
{ "respObj": { "oid": 362900267898773570 }, "errorCode": null, "success": true}
注意此时的oid已经发生了变化,从格式化前的: 362900267898773544, 格式化后成为了: 362900267898773570, 由于精度丢失,也就出现了问题,(用户A的oid由于精度丢失,oid发生变化,回传给服务端会查询用户B的资料,或者查询不到任何信息。)
产生原因
首先我们需要看下JSON的数据类型,如下图所示:
这里需要注意的是,此时Number的类型其实对应的就是Javascript中Number类型,查询后得知,Javascript中的Number的安全整数范围为: ( -(2^53 - 1) 至 2^53 - 1). 而在Java中Long类型的安全范围是: ( -(2^63 - 1) 至 2^63 - 1之间)。
因而在上述的oid中超过2^53-1时则会丢失精度。
注意: 服务端返回时不会丢失精度,只有将服务端JSON字符串格式化时,才会丢失精度. (Chrome浏览器中的preview窗口也是格式化后的)
解决方法
服务端将Long类型的统一转换成String返回即可,如上例返回结果为:
{ "respObj": { "oid": "362900267898773570" }, "errorCode": null, "success": true}
参考链接:
https://jboss-javassist.github.io/javassist/
小结
实际开发过程中遇到很多莫名奇妙的问题,归根结底还是对使用的数据类型的不够了解导致。
- 记开发时遇到的两个问题以及解决方案
- IOS开发中遇到的各种问题以及解决方案集锦
- IOS开发中遇到的各种问题以及解决方案集锦
- vc6 Unicode 使用时遇到的问题以及解决方案
- 导入android sample时遇到的问题以及解决方案
- 【matlab】遇到的问题以及解决方案
- mgo 遇到的问题以及解决方案集合
- ionic 安装遇到的问题以及解决方案
- 【Laravel】Laravel5遇到的问题以及解决方案
- 最近遇到的一些问题以及解决方案
- cocoaPods安装遇到的问题以及解决方案
- 初学wix遇到的问题以及解决方案
- 使用Xcode8遇到的问题以及解决方案
- 百度地图的两个问题以及解决方案
- Android 开发时遇到的两个模拟器问题
- 微信支付开发中遇到的问题以及注意事项和解决方案
- 项目开发遇到的问题以及解决方法
- 【Yaf】Yaf的环境安装遇到的问题以及解决方案
- 常用ACSII码总结
- httpclient模拟表单上传参数和文件
- 深入分析JavaWeb Item6 — servletConfig 与servletContext详解
- 括号匹配
- 记录下首次开通博客的时刻
- 记开发时遇到的两个问题以及解决方案
- 实现达到 60FPS 的高性能交互动画
- 大白话讲解Promise(一)
- 指定Keepalived输出日志文件
- 最全iOS数据存储方法介绍:FMDB,SQLite3 ,Core Data,Plist,Preference偏好设置
- ZIGBEE的硬件介绍和应用工程
- hdu 4722 Good Numbers
- ubuntu 16.04 usb转串口
- javascript安全类型检测(判断是否是原生对象)