- 58
- 0
问题描述
在项目中遇到fastjson的转化问题,在转化Java Bean为JSONObject时。fastjson会将java.util.Date转化为时间戳
在转化为json对象后
获取其中的date对象时使用出现异常
long birthday= (long) jsonObject.get("birthday");
经测试所有日期时间戳的值在int最小值和最大值之间的日期,都会报一个错:
java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Long
所以我这里有一个疑问,fastJson转化为对象后,使用json.get("date")这里的获得的对象到底是什么类型的,为什么会有这个bug
相关版本
jdk版本: 1.7
fastjson版本: 1.2.32
相关代码
// 测试对象
public class Student{
private Date birthday;
// getter,setter...
}
// 测试方法
public static void main(String[] args) {
Student student = new TestJson().new Student();
// 正常时间类型。测试结果正常
student.setBirthday(new Date());
// 1970-01-01 异常。即使这里数字加l转long。最后还是报错
student.setBirthday(new Date(-28800000));
// 1970-01-02 异常。即使这里数字加l转long。最后还是报错
student.setBirthday(new Date(57600000));
// 2018-07-10 已经大于int最大值,所以要加l。正常
student.setBirthday(new Date(1531152000000l));
// 1960-07-10 已经小于int最小值,要加l。正常
student.setBirthday(new Date(-299145600000l));
JSONObject fastJson = JSONObject.parseObject(JSONObject.toJSONString(student));
// 出错的代码。这里只要是时间戳位于int的最小值和最大值之间的时间戳。这样调用都会报转换异常的错误。我不知道这是为什么
long birthday = (long) fastJson.get("birthday");
// 如果使用下面四个方法,不管日期怎么设置都是正确的,不会报错
//long birthday = (long) fastJson.getInteger("birthday");
//long birthday = (long) fastJson.getIntValue("birthday");
//long birthday = fastJson.getLongValue("birthday");
//long birthday = fastJson.getLong("birthday");
System.out.println(birthday);
}
最后总结
目前由于系统中存在生日时间戳在int最小值和最大值范围内的。所以产生了以上的异常。已经使用 long birthday = fastJson.getLongValue("birthday"); 代替了原来的方法
但是还是不知道为什么出了异常,所以恳请各位知道的能告知一些。或者指点一下fastjson的源码关键实现位置
0
打赏
收藏
点击回答
网站公告
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
