spring data mongodb枚举映射转换器
Posted
技术标签:
【中文标题】spring data mongodb枚举映射转换器【英文标题】:spring data mongodb enum mapping converter 【发布时间】:2016-12-29 00:13:29 【问题描述】:当 java 代码从 mongo 加载 enum 代码中不存在的枚举值时,我希望代码不会引发异常
示例:
java.lang.IllegalArgumentException: No enum constant fr.myapp.type.OrderOptionEnum.TELEPHONE
at java.lang.Enum.valueOf(Enum.java:238)
at org.springframework.data.mongodb.core.convert.MappingMongoConverter.getPotentiallyConvertedSimpleRead(MappingMongoConverter.java:819)
at org.springframework.data.mongodb.core.convert.MappingMongoConverter.readCollectionOrArray(MappingMongoConverter.java:909)
at org.springframework.data.mongodb.core.convert.MappingMongoConverter.readValue(MappingMongoConverter.java:1184)
因为 OrderOptionEnum 中不存在 TELEPHONE
我只是想让代码返回空值
有什么想法吗?
问候
【问题讨论】:
我认为你需要创建一个自定义的ConverterFactory:***.com/a/30024621/641627 这是旧的,但可能对你有帮助(他包装了他的枚举):ghads.wordpress.com/2011/04/12/mongodb-and-java-enums 【参考方案1】:你可以添加一个自定义转换器实现Converter<String, OrderOptionEnum>
,在那里你可以实现你自己的从字符串到枚举的转换逻辑。
类似的东西
public class OrderOptionEnumMongoConverter implements Converter<String, OrderOptionEnum>
@Override
public OrderOptionEnum convert(String source)
for (OrderOptionEnum OrderOptionEnum : OrderOptionEnum.values())
if (OrderOptionEnum.name().equals(source))
return OrderOptionEnum;
return null;
注意!!! 这个转换器会尝试将 mongo 中的每个字符串转换为您的枚举,因此可能会导致不需要的转换,因此请确保仅在需要时执行此操作。
如果您希望仅在从 mongo 读取时进行此转换,则可以添加 @ReadingConverter
。
【讨论】:
以上是关于spring data mongodb枚举映射转换器的主要内容,如果未能解决你的问题,请参考以下文章
Mongodb系列- 使用spring-data-mongodb实现分页查询
Spring Data MongoDB中的手动引用与DBRef?