You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 16:52:24