java - 用于枚举字段的 mongoDb 和 spring 数据自定义转换器

标签 java mongodb spring-data spring-data-mongodb

我有一个名为 Metric 的简单 Java 类,它有两个字段:MetricType 和值:

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

我尝试做的是创建一个从字符串到 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 中注册,但未调用转换器...我在这里缺少什么?

谢谢!

最佳答案

您可以尝试使用 MongoCustomConversions 而不是 org.springframework.data.convert.CustomConversions。 MongoCustomConversions 是 CustomConversions 的子类

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

关于java - 用于枚举字段的 mongoDb 和 spring 数据自定义转换器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50410837/

相关文章:

java - Eclipse 不断执行清理/构建的问题

javascript - MongoDB/ Mongoose : Updating entire document with findOneAndUpdate()

java - 使用 Spring 将 DataSource 与 Transaction 结合使用

java - 将 Spring Boot 与 JPA 一起使用时如何坚持

jpa - Kotlin 使用 SpringData Jpa 自定义仓库

java - CAS 单点注销不起作用

java - 编译器错误 "archive for required library could not be read"- Spring Tool Suite

java - 如何将 Spring @Autowired 所需的属性设置为 false 以进行测试?

mongodb - 如何在不使用_id的情况下创建mongodb集合

java - MongoCleaner 线程数变得非常高