在使用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解析遇到的异常分析与记录相关推荐

  1. Gson解析空字符串异常的处理

    更多前沿课程:元宇宙:人类社会数字化转型(开学第一课)--机器学习视频教程-人工智能-CSDN程序员研修院 https://edu.csdn.net/course/detail/30449 Sprin ...

  2. Android 双卡双待手机解析短信异常分析及解决

    如有转载,请声明出处: 时之沙:http://blog.csdn.net/t12x3456 开发中,难免会遇到各种各样的适配问题,尤其是经过深度修改定制过的系统,有的无论是软硬件上都有很大的区别,这里 ...

  3. Android Kotlin Gson解析踩坑记录

    一.背景 一般我们在进行网络请求拿到返回结果之后,我们期望能够转化成对应的Java实体类,在这个转化过程中,可以使用自动解析的方式,也可以使用三方提供的工具类,比如Gson.FastJson等. 针对 ...

  4. exception日志 php_PHP中错误与异常的日志记录用法分析

    本文分析了PHP中错误与异常的日志记录用法.分享给大家供大家参考,具体如下: 提到 Nginx + PHP 服务的错误日志,我们通常能想到的有 Nginx 的 access 日志.error 日志以及 ...

  5. 实例:Gson解析泛型对象

    一,前期基础知识储备 1)Java泛型 Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型. 泛型的本质 ...

  6. JSONObject 和 GSON 解析 JSON 数据详解(转)

    转载:http://www.jianshu.com/p/f99de3ec0636 点此进入:从零快速构建APP系列目录导图 点此进入:UI编程系列目录导图 点此进入:四大组件系列目录导图 点此进入:数 ...

  7. java异常——分析堆栈跟踪元素+使用异常机制的技巧

    [0]README 0.1) 本文描述+源代码均 转自 core java volume 1, 旨在理解 java异常--分析堆栈跟踪元素+使用异常机制的技巧 的相关知识: [1]分析堆栈跟踪元素相关 ...

  8. Spring Boot————BeanCreationNotAllowedException异常分析

    引言 在对数据库进行新增记录的JUnit测试时,抛出一个BeanCreationNotAllowedException异常: 异常分析与解决 异常信息太长,图片截不下,粘贴来看: Exception ...

  9. 经验:Library Cache Lock之异常分析-云和恩墨技术通讯精选

    亲爱的读者朋友: 为了及时共享行业案例,通知共性问题,达成共享和提前预防,我们整理和编辑了<云和恩墨技术通讯>,通过对过去一段时间的知识回顾,故障归纳,以期提供有价值的信息供大家参考.同时 ...

  10. Android 解决双卡双待手机解析短信异常

    开发中,难免会遇到各种各样的适配问题,尤其是经过深度修改定制过的系统,有的无论是软硬件上都有很大的区别,这里不得不提到一种奇葩的机型,没错,那就是双卡双待的手机(比如XT800, A60, S8600 ...

最新文章

  1. 能量平衡_巴夏:平衡自己的能量,疗愈自己,疗愈世界
  2. asm 比 ucontext 快
  3. python图像插值
  4. 反射获取成员变量并改值
  5. JavaScript学习总结(九)——Javascript面向(基于)对象编程
  6. Poj 3281 Regional Chengdu Food(Dicnic)
  7. 【semantic】如何理解 web 语义化?
  8. 联想台式主机拆机教程_联想发布全新刃9000台式主机:搭载英伟达最新显卡+8999元...
  9. python语法(三)——函数 如何返回多个数组 列表返回值 以及接收方法
  10. elasticsearch(七)java 搜索功能Search Request的介绍与使用
  11. ACM算法模板 · 一些常用的算法模板-模板合集(打比赛专用)
  12. 微信公众号在开发者模式下自定义菜单
  13. 个人云盘:阿里云无影,百度网盘、腾讯微云争霸?
  14. 实现符号函数sign(x)
  15. 数据库中间件 MyCAT源码分析 —— XA分布式事务
  16. 黑盒测试用例设计方法【转】
  17. 担心基站高辐射?快来看5G建设电磁辐射科普宣传片
  18. “踔厉奋发 笃行不怠”第十三届中国优秀数据中心峰会暨第28届年会在北京召开
  19. 常见可燃气体爆炸限汇总
  20. LC117A泛海微马达驱动IC SOP-8

热门文章

  1. 新赛季的中超和国安,荆棘中前行
  2. 怎么转换书法字体?教你快速转换毛笔字体
  3. 金蝶云星空(Kingdee)的webapi 使用:修改生产领料单的实收数量,并且影响上下游单据(生产订单)
  4. 云中取物--app端的日志采集系统
  5. 电驴使用经验谈(转)
  6. spring cloud搭建教程
  7. 闲鱼面试:Thread.sleep(0) 到底有什么用?
  8. CSS如何实现垂直水平居中**********?
  9. Gateway网关简介及使用
  10. 基于Bootstrap垂直响应的jQuery时间轴特效