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

Spring Boot向MongoDB提交POST请求时eId字段为null问题

解决方案:Spring Boot + MongoDB 字段值为null问题

问题根源

你的问题是字段名映射不一致导致的:

  • Java实体类里的eId是驼峰命名,但Spring Data MongoDB默认会把它转成全小写的eid存储到数据库;
  • POST请求传的是eId,Jackson反序列化时能给实体类的eId赋值,但存到MongoDB后字段名变成了eid;
  • 查询时,实体类的eId匹配不上数据库里的eid,所以返回null;同时序列化输出时,字段名被转成eid,就出现了你看到的"eid": null的情况。

修复步骤

在实体类的eId字段上添加两个注解,强制统一字段名:

@Document(collection = "Employee")
public class Employee {
    @Id
    private String id;
    
    // 用@Field指定MongoDB存储的字段名,@JsonProperty指定JSON的字段名
    @Field("eId")
    @JsonProperty("eId")
    private String eId;
    
    private String firstName;
    private String lastName;
    private String emailId;
    private int grpId;

    // 务必补充所有字段的getter和setter!
    // 没有getter/setter的话,Jackson和MongoDB都无法正确处理私有字段
    public String getId() { return id; }
    public void setId(String id) { this.id = id; }
    public String getEId() { return eId; }
    public void setEId(String eId) { this.eId = eId; }
    // firstName、lastName等其他字段的getter/setter也要补上
}

关键提醒

  • 必须写getter/setter:你提供的实体类代码里没包含这些方法,但私有字段必须通过getter/setter才能被Jackson和Spring Data MongoDB正常读写,这也是很多人忽略的常见坑。
  • 字段名统一:通过注解强制MongoDB存储的字段名和JSON请求/返回的字段名一致,就能避免自动命名转换带来的不匹配问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 18:36:25