React前端传入datetime值,SQL表却记录为null的问题求助
问题排查与解决方案
核心问题1:前后端请求路径不匹配
前端UserServices.js中请求地址是http://projecturl/newactivity,但后端ActivitiesController的Post映射是/activities-item,导致请求根本没进入正确的处理接口,这是数据无法正常存储的关键原因。
修复方案
统一前后端请求路径:
- 前端
UserServices.js修改为:
createActivitiesRecord(activity) { return axios.post("http://projecturl/activities-item", activity) }
同时移除前端冗余的JSON.stringify和JSON.parse操作,直接传递对象即可:
// 移除JSON.stringify,直接传入构造好的对象 const resActivity = userService.createActivitiesRecord({lid, pid, spid, qasid, sid, cid, atid, datetime})
核心问题2:日期字段序列化/反序列化适配
前端传递的Date对象经axios自动序列化后是ISO格式字符串,后端用String接收虽可行,但适配SQL Server的datetime类型时,推荐用日期类型直接接收,避免格式冲突:
修复方案
修改Activities.java实体类的datetime字段类型,添加序列化注解:
@Entity @Table(name="activities") public class Activities { // 其他字段省略 @Column(name="datetime") @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX", timezone = "GMT+8") private LocalDateTime datetime; // 推荐用LocalDateTime替代String,适配SQL Server datetime2类型 // 确保生成符合JavaBean规范的getter/setter:getDatetime()、setDatetime(LocalDateTime datetime) }
前端保持传递Date对象即可,axios会自动转为ISO字符串,后端Jackson会完成反序列化。
额外排查点
- 数据库表结构一致性:确认SQL Server表
activities的datetime字段存在,若用LocalDateTime则对应SQL Server的datetime2类型更适配;删除字段后仍报错时,重启Spring Boot应用并清理缓存,确保表结构已同步更新。 - 实体类Getter/Setter校验:确保datetime字段的getter/setter符合规范(如字段名为
datetime,则getter为getDatetime()),可通过Lombok的@Data注解自动生成。 - 后端日志验证:在
ActivitiesController的addActivity方法中打印activity.getDatetime(),确认是否接收到值,若仍为null则检查前端传递的对象键名是否与实体类字段名完全一致(均为datetime)。
内容的提问来源于stack exchange,提问作者epicUsername
相关产品推荐
相关产品推荐

