博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Fastjson莫名的一个BUG
阅读量:5334 次
发布时间:2019-06-15

本文共 2062 字,大约阅读时间需要 6 分钟。

项目中使用的fastjson版本为:1.1.41,今天突然在重启线上服务器后莫名出现异常,而这个异常以前重来没有出现过,这个异常类似这样:

com.alibaba.fastjson.JSONException: write javaBean error    at com.alibaba.fastjson.serializer.JavaBeanSerializer.write(JavaBeanSerializer.java:212) ~[fastjson-1.1.41.jar:na]    at Serializer_6.write1(Unknown Source) ~[na:na]    at Serializer_6.write(Unknown Source) ~[na:na]    at com.alibaba.fastjson.serializer.JSONSerializer.write(JSONSerializer.java:369) ~[fastjson-1.1.41.jar:na]    at com.alibaba.fastjson.JSON.toJSONString(JSON.java:418) ~[fastjson-1.1.41.jar:na]    at com.alibaba.fastjson.JSON.toJSONString(JSON.java:568) ~[fastjson-1.1.41.jar:na] ... ... ...at java.lang.Thread.run(Thread.java:745) [na:1.7.0_79]Caused by: java.lang.ClassCastException: com.google.common.collect.Lists$TransformingSequentialList cannot be cast to com.xxx.common.dto.pager.PagerData    at Serializer_9.write1(Unknown Source) ~[na:na]    at Serializer_9.write(Unknown Source) ~[na:na]    at com.alibaba.fastjson.serializer.ObjectFieldSerializer.writeValue(ObjectFieldSerializer.java:115) ~[fastjson-1.1.41.jar:na]    at com.alibaba.fastjson.serializer.ObjectFieldSerializer.writeProperty(ObjectFieldSerializer.java:68) ~[fastjson-1.1.41.jar:na]    at com.alibaba.fastjson.serializer.JavaBeanSerializer.write(JavaBeanSerializer.java:194) ~[fastjson-1.1.41.jar:na]    ... 66 common frames omitted

百思不得其解,因为我返回的对象中根本就没有com.xxx.common.dto.pager.PagerData 这个对象信息,为什么在序列化的时候会出现这个错误呢,非常怪异。让人十分摸不着头脑的是这个错误是重启服务器后发生。毕竟线上一直在报错,当时情急之下的解决办法试了两个方法:

  1. 再次重启服务器
    重新启动服务器几次,错误依然,仅仅一次代码的小调整(根本和报错的问题风马牛不相及),但是启动服务器就报这个错,给跪了!
  2. 赶紧找其它json类库暂时替代
    json框架毕竟我还是熟悉几个的,情急下只能仓促使用Gson(google出品的json框架)临时替代了fastjson的json序列化输出,问题解决!!!

然后就是走上了寻找问题之路,找到fastjson的github网站,在中经过一些查找搜索终于找到一个issue和我遇到问题非常相像:

  1. 情形和我的基本一致,而且我使用的fastjson版本也刚好落在他们描述的bug版本区间。
    fastjson的开发者wenshao回复在1.1.42修复

我于是赶紧到Maven库查看fastjson版本,不看不知道,一看版本已经演进了好多,最新版本已经是1.2.7,更新代码maven依赖至1.2.7,然后测试发布到线上,多次重启确定没有再出现强制类转换异常。

关于这个错误的造成原因,还没有深入去了解是什么原因造成的,因为这个异常有一定的偶然性,可验证性比较差,线上服务器也是偶发出现。代码提交也没有明确是在哪次提交的时候修复了这个bug,等后面有时间再看看这个问题。

转载于:https://www.cnblogs.com/lpwork/p/6091254.html

你可能感兴趣的文章
java编程思想笔记(一)——面向对象导论
查看>>
Data Structure 基本概念
查看>>
Ubuntu改坏sudoers后无法使用sudo的解决办法
查看>>
NEYC 2017 游记
查看>>
[搬运] 写给 C# 开发人员的函数式编程
查看>>
Python之旅Day14 JQuery部分
查看>>
core--线程池
查看>>
redux-effect
查看>>
Swift和OC混编
查看>>
Android轻量级的开源缓存框架ASimpleCache
查看>>
他山之石:加载图片的一个小问题
查看>>
shell - 常识
查看>>
mssql sqlserver 使用sql脚本 清空所有数据库表数据的方法分享
查看>>
分层图最短路【bzoj2763】: [JLOI2011]飞行路线
查看>>
linux下编译复数类型引发的错误:expected unqualified-id before '(' token
查看>>
codeforces 1041A Heist
查看>>
字典常用方法
查看>>
Spring Cloud Stream消费失败后的处理策略(三):使用DLQ队列(RabbitMQ)
查看>>
bzoj1048 [HAOI2007]分割矩阵
查看>>
Java中的编码
查看>>