ApiResponse.data返回null且报服务器错误的解决请求(Postman正常)
问题解决步骤
先捕获具体错误原因
目前catch块只返回模糊的serverError,无法定位问题。修改catch逻辑,打印错误详情:catch (e, stackTrace) { apiResponse.error = '服务器错误: $e'; print('错误详情: $e'); print('调用栈: $stackTrace'); }运行后查看控制台输出,就能明确是token获取失败、JSON解析错误还是Post模型转换出错。
验证请求参数与Postman完全一致
- 打印获取到的token,确认和Postman中使用的有效token一致:
String token = await getToken(); print('当前Token: $token'); - 检查请求头是否和Postman匹配,比如Postman是否有额外的
Content-Type等头部,必要时补充到Dart请求中:headers: { 'Accept': 'application/json', 'Authorization': 'Bearer $token', 'Content-Type': 'application/json' // 如果Postman中有这一项 }
- 打印获取到的token,确认和Postman中使用的有效token一致:
核对接口返回的JSON结构
打印接口返回的原始内容,对比Postman的返回结果:final response = await http.get(Uri.parse(postsURL), headers: {...}); print('接口返回内容: ${response.body}');如果Postman返回的是直接的数组(如
[{"id":1,...}])而非包含posts键的对象,那jsonDecode(response.body)['posts']会返回null,此时应直接解析数组:apiResponse.data = jsonDecode(response.body) .map((p) => Post.fromJson(p)) .toList();添加空值校验避免异常
对posts字段做空值和类型校验,防止因字段不存在或类型错误触发异常:case 200: final responseJson = jsonDecode(response.body); final postsJson = responseJson['posts']; if (postsJson is List) { apiResponse.data = postsJson.map((p) => Post.fromJson(p)).toList(); } else { apiResponse.error = '数据格式错误,未找到posts列表'; } break;排查Post模型的fromJson方法
如果错误来自Post.fromJson(p),检查模型类的字段映射是否和接口返回的键完全一致,比如服务器返回post_content,模型里却用content,会导致解析失败抛出异常。
内容的提问来源于stack exchange,提问作者Maurilei Aleixo
相关产品推荐
相关产品推荐

