簡體   English   中英

用於枚舉字段的mongoDb和spring數據自定義轉換器

[英]mongoDb and spring data custom converter for enum field

我有一個名為Metric的簡單Java類,它有兩個字段: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版

我嘗試做的是創建一個從字符串到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的子類

但理想情況是根本不需要任何轉換,或者轉換器可以在枚舉內配置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM