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
相关产品推荐
相关产品推荐

