Flutter API插入数据时DateTime序列化引发JsonUnsupportedObjectError的解决方案咨询
Flutter API插入数据时DateTime序列化引发JsonUnsupportedObjectError的解决方案咨询
嘿,我刚看到你的问题,这个报错其实很常见——Dart自带的jsonEncode方法没办法直接序列化DateTime对象,因为它只支持基本数据类型(字符串、数字、布尔值)和标准集合类型(列表、Map)。别着急,我给你几个简单的解决办法:
方法一:转成ISO8601标准字符串(最推荐)
绝大多数后端API都支持ISO8601格式的日期字符串,你只需要把DateTime.now()换成DateTime.now().toIso8601String()就行,这是Dart DateTime自带的方法,不用额外依赖。
修改后的myinsert Map:
var myinsert={ "ID":sayac, "MAS_ID":1, "PALET_NO":e.PALETNO, "TARIH":DateTime.now().toIso8601String(), // 这里是修改的核心部分 "HUCRE_KODU":e.HUCREKODU, "MIKTAR":e.MIKTAR, "HAREKET_TIPI":"PALET TOPLAMA" };
方法二:自定义日期格式(适配后端特定要求)
如果你的后端需要非标准格式的日期(比如yyyy-MM-dd HH:mm:ss这种常用格式),可以用intl包来格式化:
- 先在
pubspec.yaml里添加依赖:
dependencies: flutter: sdk: flutter intl: ^0.18.1 # 可以替换成最新版本
- 在代码里导入包:
import 'package:intl/intl.dart';
- 按照需求格式化日期:
var myinsert={ "ID":sayac, "MAS_ID":1, "PALET_NO":e.PALETNO, "TARIH":DateFormat("yyyy-MM-dd HH:mm:ss").format(DateTime.now()), // 自定义格式 "HUCRE_KODU":e.HUCREKODU, "MIKTAR":e.MIKTAR, "HAREKET_TIPI":"PALET TOPLAMA" };
修改后的完整请求代码
var myinsert={ "ID":sayac, "MAS_ID":1, "PALET_NO":e.PALETNO, "TARIH":DateTime.now().toIso8601String(), "HUCRE_KODU":e.HUCREKODU, "MIKTAR":e.MIKTAR, "HAREKET_TIPI":"PALET TOPLAMA" }; String uri = 'http://192.168.0.21/api/values/DegerEkle/'; Uri ur = Uri.parse(uri); try { final response = await http.post(ur, headers: {'Content-Type': 'application/json'}, body: jsonEncode(myinsert) ).timeout(const Duration(seconds: 30)); print(response); } catch(e) { print("请求出错:$e"); // 加个异常捕获,方便排查其他潜在问题 }
小提醒:记得提前确认后端接口期望的日期格式,要是格式不匹配可能还是会出现接口报错哦~
备注:内容来源于stack exchange,提问作者Ahmet Enes Söylemez
相关产品推荐
相关产品推荐

