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

Flutter可正常GET获取JSON API数据但无法POST提交问题求助

问题原因及修复方案
  • 默认请求头不符合JSON接口要求:Dart的http包直接传入Map类型作为body参数时,会默认设置请求头Content-Type: application/x-www-form-urlencoded,同时将参数编码为表单格式。但你的接口是JSON类型接口,需要接收JSON格式的请求体,对应的Content-Type应为application/json,这是最常见的提交失败原因。
  • 未做响应状态校验:你当前代码仅打印响应body,没有判断response.statusCode的返回值,无法区分是客户端参数错误、接口权限错误还是服务端内部错误,比如返回415状态码即可直接定位是Content-Type不匹配的问题。
  • 接口权限校验:需确认你调用的https://myapiurl.com/api.json接口是否开放了POST请求权限,部分静态JSON资源接口默认仅支持GET请求,不接受POST提交。
修正后的代码示例
import 'dart:convert';
import 'package:http/http.dart' as http;

postData() async {
    try {
      // 构造JSON格式请求体
      Map<String, String> requestBody = {
        "productName": 1.toString(),
        "productStock": "Hello",
      };
      var response = await http.post(
        Uri.parse("https://myapiurl.com/api.json"),
        // 明确指定请求头为JSON类型
        headers: {"Content-Type": "application/json"},
        // 将Map序列化为JSON字符串传入body
        body: jsonEncode(requestBody),
      );
      // 新增状态码判断,便于定位问题
      if (response.statusCode == 200 || response.statusCode == 201) {
        print("提交成功:${response.body}");
      } else {
        print("提交失败,状态码:${response.statusCode},错误信息:${response.body}");
      }
    } catch (e) {
      print("请求异常:$e");
    }
}
额外排查建议
  • 可以通过打印请求的完整头部、参数,或者用抓包工具验证请求体格式是否符合后端要求
  • 确认后端接收的字段名、字段类型是否和你提交的一致,比如productStock是否要求为数字类型而非字符串类型

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 14:54:03