Flutter HTTP POST请求返回400错误,求排查原因
分析Flutter POST请求400错误的可能原因及解决方向
400错误属于客户端请求格式/参数错误,结合你的代码,从以下几个方向排查:
1. 请求Body格式不匹配后端要求
当前代码中,http.post传入的body是Map类型,默认会以application/x-www-form-urlencoded格式发送请求。如果后端接口要求接收application/json格式的请求体,就会返回400错误。
修改建议:
将请求体转为JSON字符串,并添加对应的Content-Type头:
Future createNewTag(String tag, String companyId) async { final createTagUrl = Uri.parse(AppConstants.BASE_URL + AppConstants.CREATE_NEW_TAG_URI); final response = await http.post( createTagUrl, headers: { 'Authorization': 'Bearer ' + AppConstants.TOKEN, 'X-API-KEY': AppConstants.API_KEY, 'Content-Type': 'application/json' // 添加JSON格式头 }, body: jsonEncode({ // 转为JSON字符串 'company_id': companyId, 'tag': tag }), ); print(response.statusCode); print(response.body); return json.decode(response.body); }
2. 参数值或字段名不符合要求
- 取消你代码中注释的
print语句,确认textController.text和companyId的实际值:是否为空字符串?是否包含后端不允许的特殊字符?companyId的格式是否符合后端要求(比如后端需要整数类型,但你传入了字符串)? - 检查字段名是否和后端接口文档完全一致:比如后端是否要求字段名为
companyId而非company_id?
3. 请求头或认证信息错误
- 确认
AppConstants.TOKEN和AppConstants.API_KEY是否有效:TOKEN是否过期?API_KEY是否拼写正确? - 检查是否遗漏了后端要求的其他必填请求头。
4. 接口地址拼接错误
打印拼接后的createTagUrl,确认地址是否正确:比如BASE_URL末尾是否带有斜杠,和CREATE_NEW_TAG_URI拼接后是否出现//这类错误路径?
内容的提问来源于stack exchange,提问作者Mackina
相关产品推荐
相关产品推荐

