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