如何在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
相关产品推荐
相关产品推荐

