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
相关产品推荐
相关产品推荐

