【问题标题】:Catching an error message with retrofit HttpException使用改造 HttpException 捕获错误消息
【发布时间】:2021-03-20 08:25:47
【问题描述】:

我正在使用Retrofit 向 API 发出一些请求,当我收到响应时,如果请求成功,通常会以这种格式从 API 收到响应

成功响应

{
    "success": 1,
    "error": [],
    "data": [
        // Some data..
     ]
}

如果有错误,响应会是这样的

响应失败

{
    "success": 0,
    "error": [
        "Password is incorrect"
    ],
    "data": []
}

现在的问题是,如果请求不成功,它带有error code 403,因此Retrofit将其归类为异常并抛出HttpException,然后我无法捕获附加的password is incorrect消息json 回复。

即使有 HttpException,我仍然可以得到正文响应吗?

更新

这是我正在使用的示例代码

视图模型

viewModelScope.launch {
    try {
        val result = myApi.request(requestParam)
    }catch (e: HttpException){
        // Log the error
    }
}

【问题讨论】:

    标签: android android-studio kotlin retrofit2


    【解决方案1】:

    好吧,我想出了一种方法来从传递的异常中取回响应。

    正如我在问题中所说,这是我正在使用的代码

    旧代码示例

    viewModelScope.launch {
        try {
            val result = myApi.request(requestParam)
        }catch (e: HttpException){
            // Log the error
        }
    }
    

    但是,我不知道响应正文是通过异常传递的,您可以使用errorBody()方法将其作为字符串接收,如下所示。

    新代码示例

    viewModelScope.launch {
        try {
            val result = myApi.request(requestParam)
        }catch (e: HttpException){
            val response = e.response()?.errorBody()?.string()
        }
    }
    

    然后你可以从那里操作这个字符串来提取错误信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-17
      • 2021-11-26
      • 2016-02-06
      • 2012-11-18
      • 2022-01-08
      • 2018-03-25
      • 1970-01-01
      相关资源
      最近更新 更多