springboot MangoTemplate保存自定义枚举类型值

该博客介绍了如何在SpringBoot中配置MongoDB,特别是针对自定义枚举类型的保存和读取。通过设置MappingMongoConverter,利用GenericConversionService添加自定义的转换器,确保枚举类型(OrderStatus, PayType, TradeType)在数据库中以Integer形式存储,并在读取时能正确转换回枚举类型。" 109592989,9443348,HTML与JS实现时间段选择插件,"['HTML', 'JavaScript', '前端开发']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/**

 * MongoDB配置

 */

@Configuration

public class MongoDBConfig

{

    private MappingMongoConverter converter;

 

    /*

     * 系统内部使用的类型转换器都在这里设置

     */

    @Autowired

    public void setMappingMongoConverter(MappingMongoConverter converter)

    {

        // 设置mongodb不保存 _class字段

        converter.setTypeMapper(new DefaultMongoTypeMapper(null));

        GenericConversionService conversionService = GenericConversionService.class.cast(

            converter.getConversionService());

 

        // 这里是设置自定义枚举类型转换器

        conversionService.addConverter(new Int2OrderStatusConverter());

        conversionService.addConverter(new OrderStatus2IntConverter());

        conversionService.addConverter(new Int2PayTypeConverter());

        conversionService.addConverter(new PayType2IntConverter());

        conversionService.addConverter(new Int2TradeTypeConverter());

        conversionService.addConverter(new TradeType2IntConverter());

 

        DirectFieldAccessor bw = (DirectFieldAccessor)PropertyAccessorFactory.forDirectFieldAccess(

            converter);

        CustomConversions conversions = (CustomConversions)bw.getPropertyValue(

            "conversions");

 

        // 这里是设置保存文档时,将Java Bean属性映射映射到文档字段的策略

        Map<Class<?>, CacheValue<Class<?>>> rawWriteTargetTypes = (Map<Class<?>, CacheValue<Class<?>>>)PropertyAccessorFactory.forDirectFieldAccess(

            conversions).getPropertyValue("rawWriteTargetTypes");

        rawWriteTargetTypes.put(OrderStatus.class,

            CacheValue.ofNullable(Integer.class));

        rawWriteTargetTypes.put(PayType.class,

            CacheValue.ofNullable(Integer.class));

        rawWriteTargetTypes.put(TradeType.class,

            CacheValue.ofNullable(Integer.class));

 

        // 这是是设置读取文档,并将文档字段转换为Java Bean属性的映射策略

        Map<ConvertiblePair, CacheValue<Class<?>>> customReadTargetTypes = (Map<ConvertiblePair, CacheValue<Class<?>>>)PropertyAccessorFactory.forDirectFieldAccess(

            conversions).getPropertyValue("customReadTargetTypes");;

        customReadTargetTypes.put(

            new ConvertiblePair(Integer.class, OrderStatus.class),

            CacheValue.ofNullable(OrderStatus.class));

        customReadTargetTypes.put(

            new ConvertiblePair(Integer.class, PayType.class),

            CacheValue.ofNullable(PayType.class));

        customReadTargetTypes.put(

            new ConvertiblePair(Integer.class, TradeType.class),

            CacheValue.ofNullable(TradeType.class));

    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值