MongoDB和Spring Data枚举字段的自定义转换器

3

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

public class Metric {
    MetricType type;
    int value;
}

enum MetricType {
    SPACE, CPU, UNKNOWN
}

当从MongoDB读取指标时,我希望有一个自定义转换器来处理MetricType。该转换器将把任何未映射到枚举的内容转换为UNKNOWN。

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

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

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

我的尝试是创建一个从字符串到MetricType的转换器。

@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中已经注册了,但是转换器没有被调用...我错过了什么吗?

谢谢!

1个回答

0
你可以尝试使用MongoCustomConversions代替org.springframework.data.convert.CustomConversions。MongoCustomConversions是CustomConversions的子类。
但理想情况下,不需要进行任何转换,或者转换器可以在枚举内部进行配置。

我遇到了类似的问题,我创建了一个自定义转换器,就像上面提到的那样,但它在每次字符串反序列化时都被调用,而我并不希望这样。我该如何避免这种情况发生? - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接