/**
* 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));
}
}