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

Flutter使用http库发送Post请求传递数组时出现报错如何解决?

报错原因

  • 你使用http库的post方法时,直接给body参数传入了包含List类型值的Map:{'category':commentList}。默认情况下,http库会将未序列化的Map当做application/x-www-form-urlencoded格式处理,该格式仅支持键值均为String的参数,不支持嵌套的数组/对象类型,因此在类型转换时抛出Cast类异常。
  • 你代码中注释了Content-type: 'application/json'请求头,同时没有对请求参数做JSON序列化,也是触发报错的直接原因。
  • 额外问题:你对响应的解析逻辑有误,convert.jsonDecode(response.body)已经将JSON字符串转为Dart对象,后续再次调用json.decode(jsonResponse)会触发类型错误;且原有逻辑判断response.statusCode != 200时执行成功操作,逻辑写反。

正确实现方案

根据后端接收的参数格式二选一即可:

情况1:后端接收JSON格式参数(数组传参最常用方案)

打开注释的JSON请求头,同时将参数序列化为JSON字符串:

import 'dart:convert';
import 'package:http/http.dart' as http;

List commentList = ['1','2','3'];
post_preference() async {
  print(commentList);
  var response = await http.post(
    Uri.parse("$uri/subscriber/add_preference"), // 高版本http库需要用Uri.parse包裹请求地址
    body: jsonEncode({'category':commentList}), // 将参数序列化为JSON字符串
    headers: <String, String>{
      'Content-type': 'application/json', // 开启JSON格式请求头
      'Accept': 'application/json',
      "Authorization": "Bearer $token"
    },
  ); 
  print(response.statusCode);
  var jsonResponse = jsonDecode(response.body); // 直接解码响应即可
  print(jsonResponse);

  if (response.statusCode == 200) { // 200为请求成功状态码
    Fluttertoast.showToast(
      msg: "successful add ",
      toastLength: Toast.LENGTH_SHORT,
      backgroundColor: Colors.green,
      gravity: ToastGravity.CENTER,
    );
    Navigator.pushReplacement(
      this.context,
      MaterialPageRoute(builder: (context) => myCv()),
    );
  } else {
    // 可补充请求失败的提示逻辑
    print("请求失败,状态码:${response.statusCode},错误信息:$jsonResponse");
  }
}

情况2:后端要求接收form-urlencoded格式的数组

如果后端不支持JSON格式入参,需要用form格式传数组,给数组对应的键名加[]后缀即可:

var response = await http.post(
  Uri.parse("$uri/subscriber/add_preference"),
  body: {
    'category[]': commentList, // 键名加[]后缀,http库会自动适配form格式的数组传参规则
  },
  headers: <String, String>{
    'Accept': 'application/json',
    "Authorization": "Bearer $token"
  },
);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 17:39:03