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

Flutter中如何将json_serializable生成的Model实例传入http post请求体

Flutter http请求传参报错解决方案

1. 能否直接将Model实例传入post请求的body?

不行。http库的post方法针对Content-Type: application/json类型的请求,body参数仅支持三类输入:String、List、Map<String, String>。自定义的Model实例不在支持范围内,传参时系统会自动调用实例的toString()方法,得到Instance of 'userModel'的无效字符串,不符合JSON格式要求,就会抛出对应的报错。

2. 是否必须先转Map才能发送?

是,完整的转换链路为:Model实例 → Map<String, dynamic> → JSON字符串
你写的var user = userModel(userName) as Map;属于错误写法:Dart中自定义Model类和Map没有继承关系,强制类型转换必然失败,只是此处请求参数报错先触发,才没有暴露类型转换的异常。

3. toJson方法的作用是什么?

Map<String, dynamic> toJson() => _$userModelToJson(this);是json_serializable为你自动生成的实例转Map方法,作用是省去手动拼接Model字段对应键值对的步骤,直接调用即可得到符合JSON序列化要求的Map<String, dynamic>对象。

正确代码示例

import 'dart:convert';
// ...
var user = userModel(userName);
// 先调用toJson转Map,再序列化转为JSON字符串
String requestBody = jsonEncode(user.toJson());
await http.post(
    Uri.parse('urllll'),
    headers: <String, String>{
      'Content-Type': 'application/json; charset=UTF-8',
    },
    body: requestBody);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 10:06:02