0

我正在使用 Retrofit 发出 REST 请求并创建相应的模型对象(使用 gson 使用 @SerializedName 注释)。不过,有一个特殊的 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 请求进行任何类型的缓存?这可以解释为什么重新请求失败的请求会继续失败,直到我终止并重新启动应用程序。

谢谢!

4

1 回答 1

1

1)为什么会发生这些转换异常,据我所知,响应数据总是正确的?

您期望的数据如下所示:

{"foo":"bar"}

但是 Gson 发现了类似的东西:

Hello!

它期待一个 JSON 对象开始(又名{字符),但它找到了一个类似字符串的字符。

2) 改造是否对 GET 请求进行任何类型的缓存?这可以解释为什么重新请求失败的请求会继续失败,直到我终止并重新启动应用程序。

Retrofit 没有任何缓存。

根据您使用的 HTTP 客户端,它可能会GET根据标头缓存请求的响应。通常您必须选择加入缓存 HTTP 客户端中的行为,所以如果您还没有这样做,我怀疑它是否已启用。

于 2014-02-25T05:47:12.453 回答