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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 03:35:13