Spring Boot集成MongoDB时@JsonProperty注解不生效如何解决?
问题原因
@JsonProperty 是Jackson序列化框架提供的注解,仅作用于Java对象和JSON字符串互相转换的场景(比如接口接收参数、返回响应的字段名映射),Spring Data MongoDB 做数据持久化时不会读取该注解的配置,默认会直接使用Java类的字段名作为MongoDB文档的存储字段名,所以会出现字段名和你预期不一致的情况。
另外注意你的Customer实体类上错误添加了@Configuration注解,该注解用于标记Spring配置类,不应该加在实体类上,建议直接删除。
解决方案
有两种常用方案可以实现你要的效果:
方案1:单个字段自定义映射
给需要修改存储字段名的属性添加Spring Data MongoDB专属的@Field注解,指定存储到MongoDB中的字段名即可,示例如下:
// 导入注解 import org.springframework.data.mongodb.core.mapping.Field; // 字段配置示例 @JsonProperty("customer_id") @Field("customer_id") private String customerId; @JsonProperty("modified_timestamp") @Field("modified_timestamp") private LocalDate modifiedDate;
方案2:全局统一蛇形命名配置
如果你项目中所有实体类都需要统一将Java小驼峰字段转为下划线蛇形命名存储到MongoDB,可以直接配置全局字段命名策略,不需要每个字段单独加注解。
在application.yml中添加如下配置:
spring: data: mongodb: field-naming-strategy: org.springframework.data.mapping.model.SnakeCaseFieldNamingStrategy
如果用的是application.properties,配置如下:
spring.data.mongodb.field-naming-strategy=org.springframework.data.mapping.model.SnakeCaseFieldNamingStrategy
配置生效后,Java字段的小驼峰命名会自动转为下划线蛇形命名存储,和你@JsonProperty指定的命名规则保持一致。
内容的提问来源于stack exchange,提问作者Valay
相关产品推荐
相关产品推荐

