java - 用于枚举字段的 mongoDb 和 spring 数据自定义转换器
问题描述
我有一个名为 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。自定义转换。MongoCustomConversions 是 CustomConversions 的子类
但理想的情况是根本不需要任何转换,或者转换器可以在枚举内部进行配置。
推荐阅读
- javascript - 用于时刻日期的自定义 js-data 格式化程序
- node.js - Node.js 在缩小的 npm 包中崩溃/退出,没有任何错误消息,如何调试?
- python-3.x - 如何获取不包含由下划线分隔的最后两个单词的字符串的一部分
- ios - Swift - 推送和弹出 UIViewcontroller 不起作用
- amazon-web-services - 通过 API 与 Alexa Skill 通信
- react-native - react native 中按钮样式的常用技术?
- swift - Swift:从网络请求中初始化模型数据 [weatherApp]
- r - 更新闪亮的标签
- java - RESTeasy 和 @MultipartForm 、服务器和客户端
- python - 列表可以放在同一个列表中吗?