4

はない例外をスローしないときに列挙型コードに存在モンゴからJavaコード負荷列挙値ばねデータのMongoDB列挙マッピングコンバータ

Exemple:電話OrderOptionEnum

にexisteない

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) 

ため

コードを返したいnull値

ご存知ですか?

よろしく

+0

私はカスタムConverterFactoryを作成する必要があると思います:http://stackoverflow.com/a/30024621/641627 – alexbt

+0

これは古かったですが、彼(あなたのenumをラップしています):https:// ghads .wordpress.com/2011/04/12/mongodb-and-java-enums – 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の各文字列をenumに変換しようとします。したがって、望ましくない変換が行われる可能性があります。 mongoからの読み取り時にのみ変換する場合は、@ReadingConverterを追加できます。