使用不同类型的响应改造错误处理
Posted
技术标签:
【中文标题】使用不同类型的响应改造错误处理【英文标题】:Retrofit Error Handling with different types of responses 【发布时间】:2021-12-21 23:26:59 【问题描述】:对于两种不同的情况,我有两种不同的反应。一种情况是我得到一个 JSONArray 作为响应
[
"type" : "cat",
"color": "black"
,
"type" : "cat",
"color": "white"
]
这是我应该得到的正常反应。但如果响应不适用于我发送的正文,我会收到以下响应。
"message" : "response not available for this date"
这是我的发帖请求
@POST("user/userTimetable")
fun getTypeApi(@HeaderMap headers: Map<String, String>, @Body body: ScheduleBody?) : Call <List<Type>>
当我得到后一个响应时,我遇到了崩溃
java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $
如何在 kotlin 上处理这种类型的响应?
【问题讨论】:
【参考方案1】:Retrofit 不会预测响应,因此要么将结果类型设置为 ResponseBody
并使用对象类型,要么更改后端以发送实现错误消息和数据的默认情况。
【讨论】:
【参考方案2】:我曾经遇到过这个问题,请按照下面的代码进行操作
-
创建一个名为 ErrorResponse 的模型类,它将返回上面的数据并修改为仅显示您的消息响应。
-
创建一个名为 ErrorResponseService 的类,该类将用于将 ErrorMessage 映射到返回的响应。
-
然后在您的 Retrofit 调用中执行此实现,以在您的响应失败时获取错误消息。
【讨论】:
尽量不要使用截图来展示代码。 我们在哪里执行第 3 步?不是很清楚 在你的 onResponse 回调中使用它,一旦你检查了 response.isSuccessful 然后使用上面的代码来映射你的响应来显示你的错误信息 由于我提到的崩溃,它不会进入 onResponse 回调。它进入 onFailure 回调。我尝试将 getTypeApi 的返回类型更改为 ErrorResponse,然后进入 onResponse 回调。以上是关于使用不同类型的响应改造错误处理的主要内容,如果未能解决你的问题,请参考以下文章