POST请求在Postman可正常调用但Flutter运行返回400错误如何解决
问题原因
核心问题为请求体编码格式与后端接口预期不匹配:
- 你的Flutter代码中将参数做了JSON序列化,请求头声明为
application/json格式,但根据你提供的Postman请求配置,接口实际要求接收表单格式(x-www-form-urlencoded/form-data)的参数,后端无法解析JSON格式的请求体,因此返回400错误。 - 次要可能原因为
user.email为空、参数名拼写错误,不符合后端校验规则。
解决方案
方案1:调整为表单格式传参(匹配Postman逻辑,优先选择)
无需对参数做JSON序列化,直接传入Map类型的参数,http/dio库会自动将其转为表单格式并匹配对应请求头,代码示例:
Future<String> loginUser(User user) async { // 直接传递键值对Map,不需要jsonEncode处理 var body = { 'strlogin': user.email, }; final headers = { "Accept": "application/json", }; Response response = await post( SeguriSignAPIURL.loginUser, headers: headers, body: body ); if (response.statusCode == 200) { var decode = jsonDecode(response.body); return decode['token']; } else { // 建议新增该行打印后端返回的具体错误信息,方便后续排查其他问题 print(response.body); print(response.reasonPhrase); return ''; } }
方案2:确认接口JSON传参支持
如果你确认后端接口支持JSON格式传参,可先打印user.email和序列化后的body值,排查是否存在参数为空、参数名拼写错误的问题,结合返回的response.body中的错误提示进一步定位问题。
内容的提问来源于stack exchange,提问作者CrappyCoder
相关产品推荐
相关产品推荐

