java的autotype,关于 fastjson 异常 autoType is not support 问题分析解决
数据仓库数据抽取服务在不久前增加了 OrientDB 的支持,当时使用了 Orient 官方提供的 JDBC 接口,后来发现 Orient JDBC 真是垃圾到无法言语了,不能满足我们自动化的 ETL 需求。
后来和 Neo4j 一样,改用 Http REST API 来请求数据,使用 Jsoup + FastJson 配合来操作数据。
当使用 http://192.190.10.170:2480/listDatabases 来获取数据库列表的时候,FastJson 直接报错了。
后来定位到代码,JSONObject.parseObject 方法在解析 JSON 字符串的时候抛出异常:
com.alibaba.fastjson.JSONException: autoType is not support. d
at com.alibaba.fastjson.parser.ParserConfig.checkAutoType(ParserConfig.java:889)
at com.alibaba.fastjson.parser.DefaultJSONParser.parseObject(DefaultJSONParser.java:325)
at com.alibaba.fastjson.parser.DefaultJSONParser.parse(DefaultJSONParser.java:1335)
at com.alibaba.fastjson.parser.DefaultJSONParser.parse(DefaultJSONParser.java:1301)
at com.alibaba.fastjson.JSON.parse(JSON.java:152)
at com.alibaba.fastjson.JSON.parse(JSON.java:143)
at com.alibaba.fastjson.JSON.parseObject(JSON.java:216)
at com.spinfosec.core.service.nosql.OrientInfoServiceImpl.schemas(OrientInfoServiceImpl.java:112)
at com.spinfosec.service.database.impl.DatabaseServiceImpl.schemas(DatabaseServiceImpl.java:594)
at com.spinfosec.service.database.thrift.DatabaseService$Processor$schemas.getResult(DatabaseService.java:877)
at com.spinfosec.service.database.thrift.DatabaseService$Processor$schemas.getResult(DatabaseService.java:862)
at org.apache.thrift.ProcessFunction.process(ProcessFunction.java:39)
at org.apache.thrift.TBaseProcessor.process(TBaseProcessor.java:39)
at org.apache.thrift.server.TThreadPoolServer$WorkerProcess.run(TThreadPoolServer.java:286)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
获取数据库列表的代码:
try
{
String url = this.driver.getUrl() + "/listDatabases";
Document document = Jsoup.connect(url)
.header("Authorization", this.driver.getAuthorization())
.header("Accept", "application/json; charset=UTF-8")
.ignoreContentType(true)
.get();
JSONObject response = JSONObject.parseObject(document.body().text());
JSONArray databases = response.getJSONArray("databases");
databases.toJavaList(String.class)
.stream()
.filter(Objects::nonNull)
.forEach(userDefList::add);
}
catch (Exception e)
{
logger.error("orient list databases error: ", e);
}
从异常日志可以看出,错误出在下面的代码处。
JSONObject response = JSONObject.parseObject(document.body().text());
断点查看 document.body().text() 返回的 JSON 字符串为:
{
"@type": "d",
"@version": 0,
"databases": [
"ank",
"demo",
"demo1",
"GratefulDeadConcerts",
"LIU"
]
}
“autoType is not support” 错误放生在 ParserConfig.checkAutoType 方法中。
根据错误堆栈回溯,核心错误发生在 DefaultJSONParser.java 323行,跟进源码:
在方法 DefaultJSONParser.parseObject 中,判断如果 json 的 key 的内容等于 @type,并且并没有禁用 DisableSpecialKeyDetect 这个关键字检测,则会进行特殊类型反序列化处理,也就是 325 行,在这里 fastjson 自己定义了一个特殊的关键字 @type 用于保留反序列化时类型信息,而我们返回的 json 内容中恰好就含有这样的关键字,fastjson 当成了自己的预定义解析类型进行解析,故会报出刚才的错误。
根据以上代码的提示,可以在进行 JSON 解析的时候,将 Feature.DisableSpecialKeyDetect 传入解析器中,设置禁用关键字解析。
JSONObject response = JSONObject.parseObject(document.body().text(), Feature.DisableSpecialKeyDetect);
java的autotype,关于 fastjson 异常 autoType is not support 问题分析解决相关推荐
- java中415是什么异常_@RequestBody 错误415问题如何解决
@RequestBody 错误415问题如何解决 js代码: function register(){ var user=$('#r_user').val(); var psw=$('#r_psw') ...
- 解决com.alibaba.fastjson.JSONException: autoType is not support
转载自 https://blog.csdn.net/cdyjy_litao/article/details/72458538 最近发现进程运行日志中出现很多下面的日志: com.alibaba.fas ...
- 初探fastJson的AutoType
文章目录 1. AutoType 何方神圣? 1.1 type字段 1.2 setAutoTypeSupport 2.反序列化攻击 3.AutoType 安全模式 4.参考 1. AutoType 何 ...
- java抛出数组格式异常,Java中异常
一.异常的概述 在Java中,把异常信息封装成了一个类.当出现了问题时,就会创建异常类对象并抛出异常相关的信息(如异常出现的位置.原因等). 二.异常的继承体系和错误的区别 1.异常的继承体系 Thr ...
- 造成java.io.IOException: Stream Closed异常的代码
造成java.io.IOException: Stream Closed异常的代码 参考文章: (1)造成java.io.IOException: Stream Closed异常的代码 (2)http ...
- IntelliJ IDEA的Maven项目在修改时报java.lang.OutOfMemoryError: PermGen space异常
IntelliJ IDEA的Maven项目在修改时报java.lang.OutOfMemoryError: PermGen space异常 参考文章: (1)IntelliJ IDEA的Maven项目 ...
- 关于java调用Dll文件的异常 %1 不是有效的 Win32 应用程序。
关于java调用Dll文件的异常 %1 不是有效的 Win32 应用程序. 参考文章: (1)关于java调用Dll文件的异常 %1 不是有效的 Win32 应用程序. (2)https://www. ...
- Java并发-UncaughtExceptionHandler捕获线程异常信息并重新启动线程
Java并发-UncaughtExceptionHandler捕获线程异常信息并重新启动线程 参考文章: (1)Java并发-UncaughtExceptionHandler捕获线程异常信息并重新启动 ...
- Java执行main方法,异常为:could not find the main class.program will exit
Java执行main方法,异常为:could not find the main class.program will exit 参考文章: (1)Java执行main方法,异常为:could not ...
最新文章
- 推荐10个能带来快感的实用windows软件,好评如潮!
- 多面体体积 matlab,matlab计算多面体体积实现代码
- oracle数据库的性能测试工具有哪些,使用Oracle性能测试工具swingbench测试instance caging...
- cython linux so,更改Cython的.so文件命名规则
- (常用API)正则表达式练习和相关的String类方法
- python实时连接oracle_Python连接Oracle
- 第一季1:HI3518EV200的体验
- IP地址开启https
- CCF受理“大数据专家委员会”2019年委员与通讯委员申请
- 笔记本电脑5年没清灰了_返利网5年估值腰斩,没了P2P六亿对赌难完成
- spring配置日志
- 爆赞!java生成文件
- LoadRunner11 压力测试
- 黑马java idea (据说是完整的)网盘
- python3高级编程学习笔记(linux环境)
- 《Steve Jobs》
- 异或鉴相器 matlab 数字鉴相器,采用VHDL设计的全数字锁相环电路设计
- 如何把两个表格合并到一起
- 使用gitee+gitbook搭建个人在线电子书
- python遍历多层字典_Python遍历嵌套字典的几种方法
热门文章
- Dynamic Web Module 3.0 requires Java 1.6 or newer
- 云计算之路-阿里云上:一场暴风雨的袭击
- 【NGN学习笔记】4 软交换中的协议2—Megaco/H.248
- 用反向传导模拟电子运动并模拟HF,HCl,HBr
- 悬浮框_纯HTML实现某宝优惠券、商品列表和活动悬浮等布局(文末有源码)
- 2016年定制维护组总结-历程回溯
- 大三下学期第四周总结
- 深度解析(十五)哈夫曼树
- 自学Zabbix3.0版本以上资产清单inventory
- Python数据分析学习笔记之Pandas入门