如何在Spring Data MongoDB保存文档时移除默认值字段
Spring Data MongoDB 忽略默认值字段持久化方案
有三种可选方案,按需选择即可:
方案1:全局配置(所有实体生效)
适合所有实体都需要默认忽略空值的场景,直接修改Spring Boot配置文件:
spring: data: mongodb: mapping: write-null-values: false
该配置会全局忽略所有值为null的字段,如果需要同时忽略空字符串、空数组、布尔false等默认值,配合方案2使用效果更好。
方案2:实体/字段维度注解配置(推荐)
只需在对应实体或字段上添加Jackson的@JsonInclude注解,即可自定义过滤规则,灵活度高且无额外开发成本:
import com.fasterxml.jackson.annotation.JsonInclude; import org.springframework.data.mongodb.core.mapping.Document; @Document // 类上配置全局生效:忽略空字符串、空数组、空集合、null值 @JsonInclude(JsonInclude.Include.NON_EMPTY) public class YourBigDocument { // 单独配置字段规则:忽略布尔值默认值false @JsonInclude(JsonInclude.Include.NON_DEFAULT) private Boolean enable; private String description; // 空字符串自动过滤 private List<String> tags; // 空数组自动过滤 // 其余字段按需配置 }
常用规则说明:
JsonInclude.Include.NON_NULL:仅忽略null值JsonInclude.Include.NON_EMPTY:忽略null、空字符串、空数组、空集合JsonInclude.Include.NON_DEFAULT:忽略基本类型的默认值(布尔false、数字0等)
该方案仅影响写入数据库的序列化过程,读取数据时缺失的字段会自动填充实体类的默认值,不会影响业务逻辑使用。
方案3:自定义写入转换器(极端灵活场景)
如果有非常个性化的字段过滤规则,可以自定义MongoDB写入转换器实现完全自定义控制:
- 自定义转换器
import org.bson.Document; import org.springframework.core.convert.converter.Converter; import org.springframework.data.convert.WritingConverter; @WritingConverter public class CustomDocumentConverter implements Converter<YourBigDocument, Document> { @Override public Document convert(YourBigDocument source) { Document doc = new Document(); // 按需添加需要写入的字段 if (Boolean.TRUE.equals(source.getEnable())) { doc.put("enable", true); } if (source.getDescription() != null && !source.getDescription().isBlank()) { doc.put("description", source.getDescription()); } if (source.getTags() != null && !source.getTags().isEmpty()) { doc.put("tags", source.getTags()); } // 其余字段处理逻辑 return doc; } }
- 注册转换器到Mongo配置
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.mongodb.core.convert.MongoCustomConversions; import java.util.List; @Configuration public class MongoConfig { @Bean public MongoCustomConversions mongoCustomConversions() { return new MongoCustomConversions(List.of(new CustomDocumentConverter())); } }
内容的提问来源于stack exchange,提问作者Waldir Marques
相关产品推荐
相关产品推荐

