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

Flutter中x-www-form-urlencoded格式POST请求失败问题求助

问题原因

你当前代码的核心错误在于:当Content-Type设置为application/x-www-form-urlencoded时,请求体要求是表单键值对格式(如username=xxx&password=yyy),但你用jsonEncode(params)把Map转成了JSON字符串(格式为{"username":"xxx","password":"yyy"}),后端无法解析这种格式,因此返回"field required & value missing"错误。

解决方案

直接将Map<String, dynamic>类型的params作为body传入http.post即可,http库会自动将其编码为符合x-www-form-urlencoded要求的格式,不需要手动调用jsonEncode。

修改后的API请求方法代码:

Future<dynamic> apiJsonPostLogin(
  String url,
  Map<String, dynamic> params,
) async {
  Map<String, String> headers = {
    'Content-Type': 'application/x-www-form-urlencoded',
  };
  log('headers : $headers');
  log('api url : $baseUrl$url');

  var r = await http.post(
    Uri.parse(baseUrl + url),
    headers: headers,
    body: params, // 直接传入Map,无需jsonEncode
    encoding: Encoding.getByName("utf-8"),
  );
  var data = jsonDecode(r.body);
  log('status code : ${r.statusCode}');

  return data;
}
补充说明

Postman测试正常是因为:当你在Postman中选择x-www-form-urlencoded格式时,Postman会自动将你输入的键值对转换为标准的表单格式字符串发送给后端,和修改后的Flutter代码逻辑一致。

内容的提问来源于stack exchange,提问作者Muhammad Rizky Nur Fajrie

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 14:45:06