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

Spring Boot REST API读取JSON对象时出现空值问题排查

问题分析:Spring Boot REST API无法读取JSON部分字段并入库

核心原因:JavaBean属性与JSON字段命名不匹配

Spring Boot默认使用Jackson处理JSON序列化/反序列化,它严格遵循JavaBean命名规范匹配字段:

  • Jackson会根据getter/setter的名称推断属性名,比如setUserID()会被识别为属性userID(驼峰格式),但你发送的JSON中对应字段是全小写的userid,命名不一致导致无法映射赋值。
  • 存在同样问题的字段包括:
    • JSON字段creationdate ↔ 实体类setCreationDate() → 推断属性名creationDate,不匹配
    • JSON字段camerasid ↔ 实体类setCamerasID() → 推断属性名camerasID,不匹配
    • JSON字段userid ↔ 实体类setUserID() → 推断属性名userID,不匹配

潜在入库风险(附带提醒)

数据库Files表的creationdate是datetime类型,但实体类中定义为String类型。即便JSON读取问题解决,后续入库时可能出现类型转换错误,建议将实体类的creationdate改为LocalDateTime或Date类型,并配合日期格式化注解处理。

解决方案

方案1:修正getter/setter命名,遵循JavaBean规范

将实体类中不符合规范的方法名修改为与属性名一致的格式:

// 修正userid的getter/setter
public int getUserid() {
    return userid;
}

public void setUserid(int userid) {
    this.userid = userid;
}

// 修正camerasid的getter/setter
public int getCamerasid() {
    return camerasid;
}

public void setCamerasid(int camerasid) {
    this.camerasid = camerasid;
}

// 修正creationdate的getter/setter
public String getCreationdate() {
    return creationdate;
}

public void setCreationdate(String creationdate) {
    this.creationdate = creationdate;
}

方案2:使用@JsonProperty注解强制指定JSON字段名

如果不想修改方法名,可在实体类属性上添加注解,明确对应JSON字段:

@Column(name = "userid")
@JsonProperty("userid")
private int userid;

@Column(name = "creationdate")
@JsonProperty("creationdate")
private String creationdate;

@Column(name = "camerasid")
@JsonProperty("camerasid")
private int camerasid;

方案3:调整日期类型匹配数据库

将实体类的creationdate改为LocalDateTime,并添加格式化注解适配传入的日期格式:

@Column(name = "creationdate")
@JsonProperty("creationdate")
@JsonFormat(pattern = "dd.MM.yyyy")
private LocalDateTime creationdate;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 11:10:29