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

Flutter Web向接口提交数值报错,如何正确传递数字参数?

问题原因与解决方法

一、http包报错原因

http.post方法默认将body编码为application/x-www-form-urlencoded格式(表单提交格式),这种格式要求所有参数值必须是字符串类型。你传入的id是整数0,不符合格式要求,因此触发类型不匹配错误;改成字符串后参数格式符合要求,所以能正常运行。

二、dio返回415状态码原因

415状态码表示「不支持的媒体类型」,说明你用dio发送请求时,请求的Content-Type与后端接口期望的类型不一致:

  • 若后端仅接受application/x-www-form-urlencoded格式,但dio默认会将Map类型的data编码为application/json格式发送,接口无法识别就会返回415;
  • 反之,若后端期望JSON格式,但你用了表单编码方式发送,也会出现该错误。

三、数字参数的正确传递方式

针对http包

  1. 直接转字符串:将数字参数转为字符串类型,适配表单编码要求
    final response = await http.post(
      Uri.parse(url),
      body: {"id": "0", "name": "bhag"},
    );
    
  2. 发送JSON格式请求:如果后端支持JSON格式,可将body序列化为JSON字符串,并设置对应请求头
    import 'dart:convert';
    
    final response = await http.post(
      Uri.parse(url),
      headers: {'Content-Type': 'application/json'},
      body: jsonEncode({"id": 0, "name": "bhag"}),
    );
    

针对dio包

  1. 适配表单格式请求:如果后端仅接受表单格式,用以下两种方式处理
    • 使用FormData构造请求体:
      var formData = FormData.fromMap({"id": "0", "name": "bhag"});
      var response = await dio.post(url, data: formData);
      
    • 手动指定表单类型请求头:
      var response = await dio.post(
        url,
        data: {"id": "0", "name": "bhag"},
        options: Options(contentType: Headers.formUrlEncodedContentType),
      );
      
  2. 发送JSON格式请求:如果后端支持JSON格式,直接传入包含数字的Map即可(dio默认会按JSON编码发送)
    var response = await dio.post(
      url,
      data: {"id": 0, "name": "bhag"},
    );
    

内容的提问来源于stack exchange,提问作者yannick

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 09:00:21