我正在使用Retrofit来发出REST请求并创建相应的模型对象(使用@SerializedName注释使用gson)。有一个特定的GET请求偶尔会导致ConversionException,并且我无法跟踪原因。我将几乎同时使用不同的参数制作10-20个类似的GET请求,其中约90%正确返回。其余的失败并发生ConversionException:
retrofit.converter.ConversionException:com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期BEGIN_OBJECT但在第1行第1列是STRING
一旦发生此转换异常,只要我再次尝试发出该请求(不杀死应用程序),它将始终具有相同的转换异常。如果我杀了应用程序并开始全新,它可能会工作。
我已经尝试在浏览器中查看具有此转换异常的请求的json响应,但它看起来总是正确的。我在“失败”请求和成功请求之间做了很多比较,而json看起来完全相同。
我的问题:
1)为什么会出现这些转换异常,据我所知,响应数据始终是正确的?
2)改造是否对GET请求进行任何类型的缓存?这可以解释为什么重新请求失败的请求会一直失败,直到我终止并重新启动应用程序。
谢谢!
答案 0 :(得分:1)
1)为什么会出现这些转换异常,据我所知,响应数据始终是正确的?
您期望的数据如下所示:
{"foo":"bar"}
但是Gson发现了更像:
Hello!
期待一个JSON对象开始(也就是{
字符),但它找到了一个类似字符串的字符。
2)改造是否对GET请求进行任何类型的缓存?这可以解释为什么重新请求失败的请求会一直失败,直到我终止并重新启动应用程序。
Retrofit没有任何缓存。
根据您使用的HTTP客户端,它可能会根据标头缓存GET
请求的响应。通常你必须选择加入HTTP客户端中的行为,所以如果你没有这样做,我怀疑它是否已启用。