com.alibaba.fastjson.JSONObject cannot be cast to com.alibaba.fastjson.JSONObject报错处理

2023-11-05

一.简介

项目A引用项目B的jar作为依赖,启动的时候也没问题,执行项目B中的一段代码的时候就报错了,代码如下:

Map<String, Object> map = Maps.newHashMap();
JSONObject jsonObject = (JSONObject)map.get("aaa");

报错代码是:

JSONObject jsonObject = (JSONObject)map.get("aaa");

报错提示:

com.alibaba.fastjson.JSONObject cannot be cast to com.alibaba.fastjson.JSONObject

JDK版本是8

FastJson的依赖为:

            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>1.2.74</version>
            </dependency>

单独跑项目B,执行那段代码,发现又没有报错。
在项目A中target中也没有发现不同版本的FastJson。
很神奇。

二.排查

JDK8提示的错误就只有那句com.alibaba.fastjson.JSONObject cannot be cast to com.alibaba.fastjson.JSONObject
提示太少了。

后面切换JDK11,这时候看到更全面的报错信息了,错误信息如下:

class com.alibaba.fastjson.JSONObject cannot be cast to class com.alibaba.fastjson.JSONObject (com.alibaba.fastjson.JSONObject is in unnamed module of loader 'app'; com.alibaba.fastjson.JSONObject is in unnamed module of loader org.springframework.boot.devtools.restart.classloader.RestartClassLoader 

发现是RestartClassLoader的问题,由spring-boot-devtools依赖引起的。

因为类的全名和路径都一样,那么根据java判断两个类是否是同一个类的2个原则:全名和类加载器,是由类加载器不同引起的。

Spring Boot 使用的自动重启技术涉及两个类加载器一个是 Baseclassloader ,用来加载不会变化的类,例如项目引用的第三方的 jar ;另一个是 Restartclassloader ,用来加载开发者自己写的会变化的类

在项目B中,FastJson是用Restartclassloader 加载的,所以不会报错,
在项目A中,由于引用了项目B的依赖,变成了项目A的FastJson用Restartclassloader 加载的,依赖的项目B 用Baseclassloader 加载。

三.解决

第一种.在pom.xml文件中去掉 spring-boot-devtools 依赖,这是因为类加载器不同导致的问题。

第二种.在 resources 目录下创建 META-INF 目录,在里面创建一个 spring-devtools.properties 文件, spring-devtools.properties 的内容如下:

restart.exclude.json=/com.alibaba.fastjson.*.jar

spring-devtools.properties 文件可以包含以restart.exclude 和restart.include 为前缀的属性。 include 属性会被“restart”类加载器加载,而 exclude 属性值会被“base”类加载器加载。该属性的值是应用于类路径的正则表达式模式

《肖申克的救赎》

生命可以归结为一种简单的选择:要么忙于生存,要么赶着去死。

懦怯囚禁人的灵魂,希望可以感受自由。强者自救,圣者渡人。

希望是件美丽的东西,也许是最好的东西。美好的东西是永远不会死的。

每个人都是自己的上帝。如果你自己都放弃自己了,还有谁会救你?

《熔炉》

我们一路奋战,不是为了能改变世界,而是为了不让世界改变我们。

现实如水母,看似美好无害实质总是致命伤人。

我们来到世界上,都是孤独的旅行,即使身边有人相伴,最终也会各奔东西!

世界上最美丽最珍贵的,反而是听不见且看不清的,只有用心才能感受得到。

《教父》

人可以不断犯错,但绝不能犯要命的错。

不要憎恨你的敌人,那会影响你的判断力。

人并非生来就伟大,而是越活越伟大。

《活着》

人是为了活着本身而活着,而不是为了活着之外的任何事物而活着。

以笑的方式哭,在死亡的伴随下活着。

没有什么比时间更具有说服力了,因为时间无需通知我们就可以改变一切。

你的命是爹娘给的,你不要命了也得先去问问他们。

《我不是药神》

世界上只有一种病,穷病,这种病你没法治,你也治不过来。

人间最高贵的是善良,是对生命的致敬。

《指环王》

把手握紧,里面什么也没有;把手放开,你得到的是一切。

我宁愿和你共度凡人短暂的一生,也不愿一个人看尽这世界的沧海桑田。

20.幸福的家庭都是相似的,不幸的家庭各有各的不幸。

或许有一天,人类变得萎缩懦弱,舍弃朋友,断绝友谊,但今天决不会这样。
《饮食男女》

22.人生不能像做菜,把所有的材料都准备好了才下锅。

什么叫做“可惜”啊,要心中有个“惜”字儿,才知道可惜。

其实一家人,住在一个屋檐下,照样可以各过各的日子,可是从心里产生的那种顾忌,才是一个家之所以为家的意义。

《让子弹飞》

世界上本没有路,有了腿便有了路。

如果你活着,早晚都会死;如果你死了,你就永远活着。

赚钱嘛,不寒碜

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

com.alibaba.fastjson.JSONObject cannot be cast to com.alibaba.fastjson.JSONObject报错处理 的相关文章

随机推荐

  • 可重入锁-Reentrant

    Reentrant Re entrant 可重复进入 什么叫可重入 线程可以进入任何一个它已经拥有的锁所同步着的代码块 可重锁作用 防止死锁 常用的可重入锁 JDK ReentrantLock java util concurrent lo
  • 如何异步+队列实现接入阿里云事件监控

    阿里云监控服务可用于收集获取阿里云资源的监控指标或用户自定义的监控指标 探测服务可用性 以及针对指标设置警报 使您全面了解阿里云上的资源使用情况 业务的运行状况和健康度 并及时收到异常报警做出反应 保证应用程序顺畅运行 阿里云事件监控文档地
  • C_单链表去重

    include
  • ubuntu18.04安装mysql5.7

    ubuntu18 04安装mysql5 7 一 安装MySQL 1 安装mysql服务 2 检查状态 3 注意查看mysql版本使用 4 查看MySQL5 7默认账号和密码 二 配置MySQL 三 查mysql服务状态 四 修改root账户
  • uView在uniapp中样式完全失效问题

    最近开发微信小程序和钉钉小程序 使用uniapp UI库准备使用uView 但是按官网引入之后 在小程序模拟器上样式完全无效 而H5正常 解决方法 由于Hbuilderx版本问题 编译的代码中会多出一行样式 可以更换3 2 16版本 亲测有
  • SecureCRT创建串口连接

    鉴于没有在网上找到很好的图解SecureCRT创建串口连接方式 自己写一篇作为备忘录 同时 便于有同样需求的朋友可以快速方便的创建串口连接方式 一 工具 电脑 串口线和超级终端 本文选择SecureCRT 二 方法步骤 1 点击设备管理 查
  • Android EditText接收扫码枪输入,有时缺位,有时出现两次回车

    最近做Android项目时 需要使用外接扫码枪扫描条码 并且接收条码输入的EditText同时还要能接收商品名称的输入 在开发调试的过程中发现 使用扫码枪时会出现条码信息丢失 或者扫码输入过程中出现两次Enter的情况 问题1 扫码枪扫码后
  • JS逆向 - 破解oklink加密参数及加密数据

    版权声明 原创不易 本文禁止抄袭 转载 侵权必究 目录 一 JS逆向目标 会当临绝顶 二 JS逆向分析 不识庐山真面目 三 JS逆向测试 只缘身在此山中 四 JS反逆向 柳暗花明又一村 五 oklink逆向完整代码下载 六 作者Info 一
  • 微信小程序期末大作业-天使童装商城

    微信小程序期末大作业 天使童装商城 导入即可使用 有轮播图 底部导航 各种童装标签 有首页 分类 优惠券 购物车 个人中心五个导航 适合初学者学习使用 如下图所示 资源链接在末尾 资源下载链接 https download csdn net
  • 拉普拉斯噪声满足ε-差分隐私的定义

    差分隐私的定义如下 给定一个兄弟数据集D和D 他们两者之间至多相差一条数据 然后给定一个映射函数 f D R d f D rightarrow R d
  • 史上最全的WebSettings说明

    setAllowContentAccess boolean allow 是否允许在WebView中访问内容URL Content Url 默认允许 内容Url访问允许WebView从安装在系统中的内容提供者载入内容 setAllowFile
  • 前后端分离的vue项目如何合并?springboot 单体应用

    首先是有这么两个应用 前端是vue项目 后端是springboot 构建的服务端 现在是需求是 这个项目很轻量级 完全没必要部署为两个应用 因此需要重新合并 具体步骤如下 第一步 vue项目先打包 执行命令 npm run build 执行
  • PyQt QSpinBox 详细用法 Python

    PyQt QSpinBox 详细用法 Python PyQt 是一个流行的 Python GUI 编程工具包 它提供了丰富的界面元素和功能 使开发人员能够创建强大的图形用户界面 QSpinBox 是 PyQt 中的一个小部件 它允许用户通过
  • 《Qt 5.9 C++开发指南》第2.1节 UI文件设计与运行机制【完整版】

    2 1 UI文件设计与运行机制 2 1 1 项目文件组成 本节实例程序samp2 1完整源程序下载地址 https download csdn net download hongandyi 10413776 在Qt Creator中新建一个
  • 【读论文】多核学习算法及其在高光谱图像分类中的应用研究进展(2021)

    读论文 多核学习算法及其在高光谱图像分类中的应用研究进展 2021 李广洋 DOI 10 12082 dqxxkx 2021 200536 文章目录 摘要 关键词 结论 该论文研究了什么 摘要 多核学习算法在高光谱图像分类领域占据着十分重要
  • 常用工作方法总结(7S、SWOT分析、PDCA循环、SMART原则、6W2H、时间管理、WBS等)

    文章目录 一 7S规则 1 1 推行7S的目的 1 2 7S的概念 二 二八定律 三 SWOT分析法 四 PDCA循环 五 SMART原则 六 6W2H工作方法 七 时间管理 八 WBS工作分解 九 碎石问题分析法 一 7S规则 1 1 推
  • ER图(实体-联系图)

    概念 E R图也称实体 联系图 Entity Relationship Diagram 提供了表示实体类型 属性和联系的方法 用来描述现实世界的概念模型 构成 ER图有实体 entity 属性 attribute 关系 relationsh
  • 光 线 追 踪

    本文首先将会介绍光线追踪的类别族谱 介绍其公共部分 之后我们会分别对其中的每一个进行详细地剖析 光线追踪 Ray tracing 是一个拥有历史感的词汇 图形学从业者从neutron transport heat transfer和illu
  • 有不用出门就能做的副业吗?

    疫情期间一个00后的女孩在家隔离两周 做视频剪辑赚了4000多 是怎么做的呢 其实操作方法并不难 大周也用这个方法在头条上注册了一个新号 虽然时间不长但也赚了3000多 今天这期内容来给粉丝们分享一下操作流程 如果你也想做 可以给大周扣 8
  • com.alibaba.fastjson.JSONObject cannot be cast to com.alibaba.fastjson.JSONObject报错处理

    一 简介 项目A引用项目B的jar作为依赖 启动的时候也没问题 执行项目B中的一段代码的时候就报错了 代码如下 Map