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

如何在Dio Package中获取并打印错误响应的实际内容而非默认报错信息

解决方案

Dio返回的响应类错误都封装在DioError实例的response属性中,现有代码直接调用错误对象的toString()方法只会输出默认格式化的堆栈信息,需要先判断错误类型,再提取响应体内的业务字段即可。

修改后的代码如下:

Future<void> getTechnology() async {
    await DioHelper.getData(
      path: 'v2/top-headlines',
      query: {
        'country': 'ae',
        'category': 'technology',
        'apiKey': '1111',
      },
    ).then(
      (value) async {
        _technology = value.data['articles'];
      },
    ).catchError(
      (onError) {
        // 校验错误类型为DioError
        if (onError is DioError) {
          // 存在响应的场景:接口返回非2xx状态码
          if (onError.response != null) {
            // 直接打印完整响应体,即你需要的业务错误字段
            print(onError.response?.data);
            // 也可以单独提取指定字段
            // print('错误码:${onError.response?.data['code']}');
            // print('错误信息:${onError.response?.data['message']}');
          } else {
            // 无响应的场景:网络断开、请求超时、DNS解析失败等
            print(onError.message);
          }
        } else {
          // 处理其他非Dio类型的异常
          print(onError.toString());
        }
      },
    );
  }

额外可选优化:

  • 如果你需要全局统一处理所有Dio请求的错误,可直接给Dio实例添加拦截器,在onError回调中统一处理错误逻辑,无需每个请求单独编写catchError代码
  • 若接口返回的是未解析的JSON字符串,可调用jsonDecode(onError.response?.data)手动解析为Map类型后再按key取值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 13:24:02