Spring Boot集成MongoDB:如何将枚举类型以整数形式存储?
解决Spring Boot + MongoDB枚举以整数形式存储的问题
默认情况下MongoDB会将枚举类型以名称字符串(如"JUNIOR")存储,要改为存储枚举对应的整数值,需要自定义MongoDB类型转换器,具体实现如下:
方法一:自定义类型转换器并注册
1. 编写写入转换器(枚举转整数)
这个转换器负责将Status枚举对象转换为对应的整数值,存入数据库:
import org.springframework.core.convert.converter.Converter; import org.springframework.data.convert.WritingConverter; @WritingConverter public class StatusToIntegerConverter implements Converter<Status, Integer> { @Override public Integer convert(Status source) { return source.getValue(); } }
2. 编写读取转换器(整数转枚举)
这个转换器负责从数据库读取整数值,转换回Status枚举对象:
import org.springframework.core.convert.converter.Converter; import org.springframework.data.convert.ReadingConverter; @ReadingConverter public class IntegerToStatusConverter implements Converter<Integer, Status> { @Override public Status convert(Integer source) { for (Status status : Status.values()) { if (status.getValue() == source) { return status; } } throw new IllegalArgumentException("无效的Status值: " + source); } }
3. 注册转换器到Spring容器
创建配置类,将上述转换器注册到MongoDB的自定义转换体系中:
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 StatusToIntegerConverter(), new IntegerToStatusConverter() )); } }
完成以上配置后,Employee实体中的status字段会以整数形式存入MongoDB,读取时也会自动转换为Status枚举对象。如果数据库中存在未匹配的整数值,转换器会抛出IllegalArgumentException,便于排查数据异常。
内容的提问来源于stack exchange,提问作者fsk
相关产品推荐
相关产品推荐

