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

ApiResponse.data返回null且报服务器错误的解决请求(Postman正常)

问题解决步骤
  • 先捕获具体错误原因
    目前catch块只返回模糊的serverError,无法定位问题。修改catch逻辑,打印错误详情:

    catch (e, stackTrace) {
      apiResponse.error = '服务器错误: $e';
      print('错误详情: $e');
      print('调用栈: $stackTrace');
    }
    

    运行后查看控制台输出,就能明确是token获取失败、JSON解析错误还是Post模型转换出错。

  • 验证请求参数与Postman完全一致

    1. 打印获取到的token,确认和Postman中使用的有效token一致:
      String token = await getToken();
      print('当前Token: $token');
      
    2. 检查请求头是否和Postman匹配,比如Postman是否有额外的Content-Type等头部,必要时补充到Dart请求中:
      headers: {
        'Accept': 'application/json',
        'Authorization': 'Bearer $token',
        'Content-Type': 'application/json' // 如果Postman中有这一项
      }
      
  • 核对接口返回的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 14:57:21