You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Retrofit抛出异常而非返回响应,如何获取404错误数据?

解决Retrofit 404时获取服务器错误对象的问题

默认情况下Retrofit会把4xx、5xx这类HTTP错误码直接抛出异常,所以你的代码会进入catch块。要拿到服务器返回的错误数据,按以下步骤修改即可:

  • 第一步:修改Retrofit接口的返回类型
    把接口方法的返回值用Response<T>包裹,这样Retrofit就不会自动抛出HTTP异常,而是返回完整的响应对象供你处理。示例:

    interface MyApiService {
        @GET("你的接口路径")
        suspend fun getRoadStatus(@Query("roadName") roadName: String): Response<List<你的数据模型类>>
    }
    
  • 第二步:在ViewModel里手动处理响应结果
    调用接口后先判断response.isSuccessful:

    • 成功状态下,从response.body()获取正常数据;
    • 失败状态下,通过response.errorBody()解析服务器返回的错误内容。

    修改后的getRoadStatus方法:

    fun getRoadStatus(roadName: String) {
        viewModelScope.launch {
            _busy.value = true
            try {
                println("Getting result")
                val response = MyApi.retrofitService.getRoadStatus(roadName)
                if (response.isSuccessful) {
                    response.body()?.takeIf { it.isNotEmpty() }?.let {
                        _dataObject.value = it[0]
                    }
                } else {
                    // 解析错误响应
                    response.errorBody()?.let { errorBody ->
                        val errorJson = errorBody.string()
                        // 用你自己的错误模型类解析JSON,比如用Gson/Moshi
                        val errorModel = Gson().fromJson(errorJson, 你的错误模型类::class.java)
                        // 这里可以把错误对象存到LiveData,或者做其他业务处理
                        println("服务器返回错误:${errorModel.message}")
                    }
                }
            } catch (e: Exception) {
                println("请求异常:${e.message}")
            } finally {
                _busy.value = false
            }
        }
    }
    
  • 补充:定义错误模型类
    提前和服务器返回的错误JSON结构对应好模型类,比如服务器返回的404响应是:

    {
        "message": "该道路不存在",
        "code": 404
    }
    

    对应的模型类:

    data class 你的错误模型类(
        val message: String,
        val code: Int
    )
    

内容的提问来源于stack exchange,提问作者Damandroid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 02:05:36