Gson解析遇到的异常分析与记录
在使用Gson解析api响应结果的字符串时遇到两个非常奇怪的报错,一开始以为是json字符串不规范引起的,后经排查与InputStreamReader接收有直接关系。
MalformedJsonException
报错
com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 66 path $
解决方案
使用gson解析时,默认情况下将会以严格模式对json字符串进行解析,
在gson实例创建时,进行setLenient()就能对部分不符合json规范要求的字符串解析
private static Gson gson = new GsonBuilder().serializeNulls().serializeSpecialFloatingPointValues().disableHtmlEscaping().setLenient().create();
以上异常不再报错后,出现了另外的异常错误:JsonIOException
JsonIOException
报错
com.google.gson.JsonIOException: JSON document was not fully consumed
解决方案
使用BufferedReader
替换InputStreamReader
处理http请求响应结果的输入流。
解决方案有效的前提
针对使用http-client相关的jar包进行http请求返回的响应对象json结构(笔者使用了java自带的HttpURLConnection
网络编程类进行请求)
同类错误的参考
错误解决参考链接:com.google.gson.JsonIOException: JSON document was not fully consumed.
解决排查过程
重新检查需要解析的字符串,由http请求返回json结构(该结果通过debug模式调试单独复制出来)
{"Ret":0,"ErrCode":0,"ErrMsg":"OK","StackTrace":"","Data":false}
初步看起来并没有什么问题,也不觉得这是一个会引起解析异常的字符串。
该json字符串是调用第三方api后返回的,只是使用使用了InputStreamReader
方式来接收响应结果,如下:
/** conn为HttpURLConnection实例 **/
public static String getRequest(String url, boolean withProxy){HttpURLConnection conn = null;try {conn = connWrapper(url, "GET", withProxy);// 导致问题关键 -- InputStreamReader获取响应结果,有可能造成gson解析时错误Reader reader = new InputStreamReader(conn.getInputStream());char[] buff = new char[512];StringBuffer strBuff = new StringBuffer();while (reader.read(buff) != -1) {strBuff.append(buff);}reader.close();return strBuff.toString();} catch(IOException e){e.printStackTrace();} finally{if (conn != null) conn.disconnect();}return "";}
更新后为BufferedReader
处理方式:
public static String getRequest(String url, boolean withProxy){HttpURLConnection conn = null;try {conn = connWrapper(url, "GET", withProxy);// 解决问题关键 -- 使用BufferedReader获取响应结果BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));String line;StringBuffer strBuff = new StringBuffer();while ((line = reader.readLine()) != null) {strBuff.append(line);}reader.close();return strBuff.toString();} catch(IOException e){e.printStackTrace();} finally{if (conn != null) conn.disconnect();}return "";}
替换后即可正常解析字符串。
Gson解析遇到的异常分析与记录相关推荐
- Gson解析空字符串异常的处理
更多前沿课程:元宇宙:人类社会数字化转型(开学第一课)--机器学习视频教程-人工智能-CSDN程序员研修院 https://edu.csdn.net/course/detail/30449 Sprin ...
- Android 双卡双待手机解析短信异常分析及解决
如有转载,请声明出处: 时之沙:http://blog.csdn.net/t12x3456 开发中,难免会遇到各种各样的适配问题,尤其是经过深度修改定制过的系统,有的无论是软硬件上都有很大的区别,这里 ...
- Android Kotlin Gson解析踩坑记录
一.背景 一般我们在进行网络请求拿到返回结果之后,我们期望能够转化成对应的Java实体类,在这个转化过程中,可以使用自动解析的方式,也可以使用三方提供的工具类,比如Gson.FastJson等. 针对 ...
- exception日志 php_PHP中错误与异常的日志记录用法分析
本文分析了PHP中错误与异常的日志记录用法.分享给大家供大家参考,具体如下: 提到 Nginx + PHP 服务的错误日志,我们通常能想到的有 Nginx 的 access 日志.error 日志以及 ...
- 实例:Gson解析泛型对象
一,前期基础知识储备 1)Java泛型 Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型. 泛型的本质 ...
- JSONObject 和 GSON 解析 JSON 数据详解(转)
转载:http://www.jianshu.com/p/f99de3ec0636 点此进入:从零快速构建APP系列目录导图 点此进入:UI编程系列目录导图 点此进入:四大组件系列目录导图 点此进入:数 ...
- java异常——分析堆栈跟踪元素+使用异常机制的技巧
[0]README 0.1) 本文描述+源代码均 转自 core java volume 1, 旨在理解 java异常--分析堆栈跟踪元素+使用异常机制的技巧 的相关知识: [1]分析堆栈跟踪元素相关 ...
- Spring Boot————BeanCreationNotAllowedException异常分析
引言 在对数据库进行新增记录的JUnit测试时,抛出一个BeanCreationNotAllowedException异常: 异常分析与解决 异常信息太长,图片截不下,粘贴来看: Exception ...
- 经验:Library Cache Lock之异常分析-云和恩墨技术通讯精选
亲爱的读者朋友: 为了及时共享行业案例,通知共性问题,达成共享和提前预防,我们整理和编辑了<云和恩墨技术通讯>,通过对过去一段时间的知识回顾,故障归纳,以期提供有价值的信息供大家参考.同时 ...
- Android 解决双卡双待手机解析短信异常
开发中,难免会遇到各种各样的适配问题,尤其是经过深度修改定制过的系统,有的无论是软硬件上都有很大的区别,这里不得不提到一种奇葩的机型,没错,那就是双卡双待的手机(比如XT800, A60, S8600 ...
最新文章
- 能量平衡_巴夏:平衡自己的能量,疗愈自己,疗愈世界
- asm 比 ucontext 快
- python图像插值
- 反射获取成员变量并改值
- JavaScript学习总结(九)——Javascript面向(基于)对象编程
- Poj 3281 Regional Chengdu Food(Dicnic)
- 【semantic】如何理解 web 语义化?
- 联想台式主机拆机教程_联想发布全新刃9000台式主机:搭载英伟达最新显卡+8999元...
- python语法(三)——函数 如何返回多个数组 列表返回值 以及接收方法
- elasticsearch(七)java 搜索功能Search Request的介绍与使用
- ACM算法模板 · 一些常用的算法模板-模板合集(打比赛专用)
- 微信公众号在开发者模式下自定义菜单
- 个人云盘:阿里云无影,百度网盘、腾讯微云争霸?
- 实现符号函数sign(x)
- 数据库中间件 MyCAT源码分析 —— XA分布式事务
- 黑盒测试用例设计方法【转】
- 担心基站高辐射?快来看5G建设电磁辐射科普宣传片
- “踔厉奋发 笃行不怠”第十三届中国优秀数据中心峰会暨第28届年会在北京召开
- 常见可燃气体爆炸限汇总
- LC117A泛海微马达驱动IC SOP-8