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,不匹配
- JSON字段
潜在入库风险(附带提醒)
数据库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
相关产品推荐
相关产品推荐

