MongoDB Java SDK中@BsonProperty不生效 如何让字段使用注解指定名称
解决方案
问题根因
你当前使用的默认PojoCodecProvider配置仅会扫描Getter/Setter方法上的注解,不会识别字段上的@BsonProperty注解,同时会基于JavaBean方法名自动推导小驼峰格式的字段名,导致注解配置不生效。
具体修改步骤
- 第一步:调整
PojoCodecProvider的约定配置,开启注解扫描能力
把你原来初始化pojoCodecRegistry的代码替换为以下内容:import org.bson.codecs.pojo.Conventions; // ...其他原有导入 // 构建支持注解扫描的PojoCodecProvider PojoCodecProvider pojoCodecProvider = PojoCodecProvider.builder() .conventions(List.of( Conventions.ANNOTATION_CONVENTION, // 启用Bson注解处理,支持字段、方法上的@BsonProperty Conventions.CLASS_AND_PROPERTY_CONVENTION, Conventions.SET_PRIVATE_FIELDS_CONVENTION // 支持直接操作私有字段,可选配置 )) .automatic(true) .build(); CodecRegistry pojoCodecRegistry = fromProviders(pojoCodecProvider); - 第二步:补全POJO类缺失的Getter方法
你当前Product类的UPC属性只有setUPC方法,没有对应的getUPC方法,序列化时无法正常读取属性值,需要补上:public String getUPC() { return UPC; } - 可选兜底方案:如果改完配置还是不生效,可以直接把
@BsonProperty注解放到对应的Getter方法上,比如:@BsonProperty(value = "product_sk") public String getProductSK() { return ProductSK; }
注意事项
确保你导入的@BsonProperty包路径正确,必须是org.bson.codecs.pojo.annotations.BsonProperty,不要误导入其他框架的同命名注解。
内容的提问来源于stack exchange,提问作者khateeb
相关产品推荐
相关产品推荐

