Flutter中用Dio发送带布尔、Double参数的GET请求报500错误
解决Dio GET请求到Django后端的500错误
既然Postman能正常发起请求但Dio不行,核心问题大概率是参数序列化格式和后端期望不匹配——毕竟Django对GET参数的类型解析有严格的字符串格式要求,而Dio的自动序列化逻辑可能和Postman的手动参数输入有差异。下面是几个针对性的解决方案,按优先级尝试:
1. 移除不必要的Content-Type请求头
GET请求的参数是拼接在URL中的,并非放在请求体里,而你添加的application/x-www-form-urlencoded是POST请求表单的头,可能会让后端的解析逻辑混乱。修改headers部分:
options: Options( followRedirects: false, validateStatus: (status) { return status < 500; }, headers: { "accept": "*/*", "Authorization": "Bearer $auth", // 移除这一行:"Content-Type": "application/x-www-form-urlencoded" } )
2. 手动转换参数为后端期望的字符串格式
Django对布尔值、浮点数的字符串解析有特定要求,比如布尔值可能需要小写的"true"/"false",浮点数不能是科学计数法格式。手动转换参数:
Map<String, dynamic> payload = { "switch": _switch.toString().toLowerCase(), // 强制转为小写布尔字符串 "s_currency": senderCurrencyVal, "r_currency": recieverCurrencyVal, "amount": amount.toStringAsFixed(2) // 按保留两位小数的格式转字符串,适配后端解析 };
如果后端对浮点数格式没有固定小数位要求,用amount.toString()即可,但要避免出现科学计数法(比如极大/极小的数字)。
3. 手动拼接URL参数,绕过Dio的自动序列化
如果上面的方法无效,可能是Dio的queryParameters序列化逻辑有隐藏问题,直接手动构建完整URL:
Future<Converter> currencyConverter() async { String convertURL = baseURL + 'convert/currency/'; String auth = await localpref.getString('access'); // 手动构建query参数字符串 String queryParams = Uri( queryParameters: { "switch": _switch ? "true" : "false", "s_currency": senderCurrencyVal, "r_currency": recieverCurrencyVal, "amount": amount.toString(), }, ).query; String fullRequestUrl = "$convertURL?$queryParams"; try { var res = await dio.get( fullRequestUrl, options: Options( followRedirects: false, validateStatus: (status) { return status < 500; }, headers: { "accept": "*/*", "Authorization": "Bearer $auth", } ) ); // 后续逻辑不变... } catch (e) { print(e); } }
4. 开启Dio日志,对比Postman的请求URL
添加日志拦截器,查看Dio实际发送的URL,和Postman里的请求URL做对比,就能精准定位参数差异:
// 在初始化Dio的地方添加拦截器 dio.interceptors.add(LogInterceptor( request: true, // 打印请求信息 requestHeader: false, requestBody: false, ));
运行后查看控制台输出的请求URL,和Postman的URL对比,重点看switch、amount参数的格式是否一致。
这些方法应该能解决问题,毕竟Postman能正常运行说明后端逻辑没问题,只是Dio的请求格式和后端期望不匹配而已。
内容的提问来源于stack exchange,提问作者Onalo Joseph
相关产品推荐
相关产品推荐

