添加 GZIP 编码导致 MalformedJsonException
Posted
技术标签:
【中文标题】添加 GZIP 编码导致 MalformedJsonException【英文标题】:Adding GZIP encoding results in MalformedJsonException 【发布时间】:2015-05-17 21:11:01 【问题描述】:我在基本请求中添加了这个标头:“Accept-encoding”、“gzip”
这会导致 MalformedJsonException 敦促我使用 JsonReader.setLenient(true)
我已经修改了我的代码来支持它:
JsonReader jsonReader = new JsonReader(new StringReader(myStringReader with json string));
jsonReader.setLenient(true);
JsonParser parser = new JsonParser();
JsonObject object = parser.parse(jsonReader).getAsJsonObject();
我仍然遇到同样的错误,有人认为吗?
【问题讨论】:
您可以使用java.util.zip.GZIPInputStream
解压缩gzip
字符串
【参考方案1】:
几件事-
如果您正在设置 GZIP 标头,这会告诉您正在联系的服务器您能够解压缩 gzip 的响应。您可能正在取回压缩后的响应,并尝试将其解析为 json - 您需要先对其进行解压缩。
如果您使用HttpUrlConnection
,它会自动设置gzip 标头并为您解压缩。您可以通过代理您的应用程序并查看它发出的 http 请求来确认这一点。
HttpUrlConnection
的一个有趣之处在于,虽然它会设置 gzip 标头并为您解压缩,如果您自己设置 gzip 标头,它不会。然后它会依赖你来解压它。
简而言之,要么根本不设置标头,而是依靠HttpUrlConnection
为您完成所有工作,或者您必须在 json 代码之前使用 GZIPInputStream
类解压缩响应,请参阅此答案深入解释:
How can I Zip and Unzip a string using GZIPOutputStream that is compatible with .Net?
【讨论】:
以上是关于添加 GZIP 编码导致 MalformedJsonException的主要内容,如果未能解决你的问题,请参考以下文章