用于枚举字段的 mongoDb 和弹簧数据自定义转换器



我有一个简单的Java类,叫做Metric,它有两个字段:MetricType和value:

public class Metric {
MetricType type;
int value;
}
enum MetricType {
SPACE, CPU, UNKNOWN
}

从 mongo 读取指标时,我想要一个 MetricType 的自定义转换器,它将任何未映射到枚举的内容转换为 UNKNOWN。

我的仓库是一个简单的仓库:

public interface MetricRepository extends MongoRepository<Metric, 
String> {}

我正在使用 spring-boot-starter-data-mongodb 版本 1.5.9

我尝试做的是创建一个从字符串到指标类型的转换器

@ReadingConverter
public class StringToMetricTypeConverter implements Converter<String, MetricType> {
@Override
public MetricType convert(String dbData) {
try {
return MetricType.valueOf(dbData);
}
catch (IllegalArgumentException e) {
return MetricType.UNKNOWN;
}
}
}

并在 mongoConfig 文件中添加:

@Bean
public MongoTemplate mongoTemplate() throws Exception {
MongoTemplate mongoTemplate = new MongoTemplate(mongo(), getDatabaseName());
MappingMongoConverter mongoMapping = (MappingMongoConverter) mongoTemplate.getConverter();
mongoMapping.setCustomConversions(customConversions()); 
mongoMapping.afterPropertiesSet();
return mongoTemplate;
}
@Bean
public CustomConversions customConversions() {
return new CustomConversions(Arrays.asList(new StringToMetricTypeConverter()));
}

我确实看到转换器已在 mongoTemplate 中注册,但转换器未被调用......我在这里错过了什么?

谢谢!

你可以尝试使用MongoCustomConversions而不是org.springframework.data.convert。自定义转换。MongoCustomConversions是CustomConversions的一个子类

但理想的情况是根本不需要任何转换,或者转换器可以在枚举中配置。

最新更新