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

如何在Flutter中处理带嵌套结构的特殊JSON POST请求

问题原因

你当前的代码仅直接序列化了LoginProfile类本身的属性,没有按照后端要求在外层包裹Registration节点,同时现有类逻辑也遗漏了VerifyCode字段的序列化处理。

修正步骤

1. 补全LoginProfile类的字段逻辑

首先给构造方法、序列化、反序列化方法都补全VerifyCode的处理:

// 修正后的LoginProfile类
class LoginProfile {
  int id;
  String CardNumber;
  String ExpiryDate;
  String ExpiryYear;
  String VerifyCode; // 确认该字段可正常获取到TextField的输入值

  LoginProfile({
    this.id = 0,
    required this.CardNumber,
    required this.ExpiryDate,
    required this.ExpiryYear,
    required this.VerifyCode, // 新增VerifyCode必填参数
  });

  factory LoginProfile.fromJson(Map<String, dynamic> map) {
    return LoginProfile(
      id: map["id"],
      CardNumber: map["CardNumber"],
      ExpiryDate: map["ExpiryDate"],
      ExpiryYear: map["ExpiryYear"],
      VerifyCode: map["VerifyCode"], // 反序列化补全VerifyCode
    );
  }

  Map<String, dynamic> toJson() {
    return {
      "id": id,
      "CardNumber": CardNumber,
      "ExpiryDate": ExpiryDate,
      "ExpiryYear": ExpiryYear,
      "VerifyCode": VerifyCode, // 序列化补全VerifyCode
    };
  }

  @override
  String toString() {
    return 'Profile{id: $id, CardNumber: $CardNumber, ExpiryDate: $ExpiryDate, ExpiryYear: $ExpiryYear, VerifyCode: $VerifyCode}';
  }
}

2. 修改请求体构造逻辑

发送请求时不要直接序列化LoginProfile对象,在外层套一层Registration节点再序列化即可,注意要导入dart:convert库做JSON序列化:

import 'dart:convert';

Future<bool> createProfile(LoginProfile data) async {
  // 构造符合要求的外层结构
  final requestBody = {
    "Registration": data.toJson(),
  };
  final response = await client.post(
    Uri.parse("$baseUrl"), // 新版本http/dio库要求传Uri类型,旧版本可直接传字符串地址
    headers: {'Content-Type': 'application/json; charset=UTF-8'},
    body: jsonEncode(requestBody), // 序列化外层结构作为请求体
  );
  if (response.statusCode == 201) {
    return true;
  } else {
    print(response.body);
    return false; // 补充缺失的返回值,避免语法报错
  }
}

补充说明

如果后端不需要接收id字段,直接在toJson方法中删除"id": id这一行即可,序列化后的结构就会完全匹配你需要的目标格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 12:21:03