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

Flutter发送含列表数据的raw body POST请求无成功响应怎么解决?

你提供的Postman请求参考截图:
Postman请求截图

问题定位

  • 你设置了请求头Content-Type: application/json,但直接将Dart Map对象作为body参数传入了POST请求:Dart的http包不会自动将Map序列化为JSON字符串,默认会将Map转为x-www-form-urlencoded格式的表单数据,和你声明的请求体格式不一致,服务端无法正常解析参数。
  • 你代码中实际请求使用的是硬编码的body变量,和你打印的saveBookingRequestModel.toJson()没有关联,如果你是要使用请求模型的序列化结果,硬编码的参数也会和预期不符。

修正步骤

  1. 首先确认你已经引入了dart:convert库,用于JSON序列化
  2. 将请求体Map传入jsonEncode方法转为JSON字符串后,再作为body参数传入请求
  3. 如果你要使用SaveBookingRequestModel构造的参数,直接序列化该模型的toJson()结果即可,不需要额外硬编码请求体

修正后的代码示例

import 'dart:convert'; // 必须引入

Future<SaveBookingModel> saveBookingModel(SaveBookingRequestModel saveBookingRequestModel, BuildContext context) async{
  String url = baseUrl + "booking/save";
  // 如果要用硬编码的body就保留下面这段,要用模型的话直接删掉这段就行
  var body = {
    "customer_id": "2",
    "location_id": "1",
    "discount_amount": "20.00",
    "discount_voucher": "V123",
    "BookingItems": [{
      "court_id": "3",
      "from_time": "21/10/2021 7:00PM",
      "to_time": "21/10/2021 8:00PM ",
      "amount": "150.00",
      "hours": "1",
      "time_slot_from": "7",
      "time_slot_to": "8"
    },
      {
        "court_id": "3",
        "from_time": "21/10/2021 10:00PM",
        "to_time": "21/10/2021 11:00PM",
        "amount": "100.00",
        "hours": "1",
        "time_slot_from": "10",
        "time_slot_to": "11"
      }
    ],
    "BookingPayments": [{
      "paid_amount": "230.00",
      "payment_desc": "desc",
      "payment_status": "1",
      "payment_method": "8",
      "reference1": "reference1",
      "reference2": "reference2",
      "reference3": "reference3"
    }
    ]
  };
  print("Save booking request body ${saveBookingRequestModel.toJson()}");
  Utils.showLoaderDialog(context);
  final response = await http.post(Uri.parse(url), 
    headers: {
      "Accept": "application/json",
      "Content-Type":"application/json",
      'Authorization':'Bearer ${Utils.token}',
    }, 
    // 关键修改:序列化Map为JSON字符串,要用模型的话就改成 jsonEncode(saveBookingRequestModel.toJson())
    body: jsonEncode(body)
  );

  print("Save booking request response $saveBookingRequestModel");
  print("Save booking response response ${response.body}");
  if(response.statusCode == 200){
    Navigator.pop(context);
    return SaveBookingModel.fromJson(json.decode(response.body));
  }else {
    return Utils.errorDialog(context, "Something went wrong");
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 07:36:06