4

我想代码不抛出异常时从该不存在枚举代码蒙戈java代码负载枚举值弹簧数据mongodb的枚举映射变换器

例:

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

existe

我想要代码返回空值

任何想法?

问候

+0

我认为你需要创建一个自定义的ConverterFactory:http://stackoverflow.com/a/30024621/641627 – alexbt

+0

这是旧的,但可能对你有帮助(他包装他的枚举):https:// ghads .wordpress.com/2011/04/12/mongodb的和 - java的枚举 – alexbt

回答

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