2017-02-19 7 views
1

Spring Bootを使用して、自分のドメインオブジェクトをJSON本体として受け入れ、Mongoドキュメントに永続化しようとするREST APIを公開しています。 JSONリクエストで、この列挙体の小文字の値を小文字としてMongoに保存するにはどうしたらいいですか?列挙型の小文字の値を受け入れることについてSpringからAPIへの小文字のenum値

答えて

0

、あなたにも小文字でのMongoDBに保存するに関してthis answer

を参照することができ、カスタム・コンバータを作成し、同じを登録する必要があります。

典型的な書き込みコンバータのようなものになります

public final class YourEnumWriteConverter implements Converter<YourEnum, String> { 
    @Override 
    public String convert(YourEnum source) { 
     return source == null ? "" : source.name().toLowerCase(); 
    } 
} 

また、DBから首尾列挙型として小文字の文字列を読み取るために、対応する読み取りコンバータを記述する必要があります。典型的な読み取りコンバータがなりますように:Converterパッケージorg.springframework.core.convert.converter

そしてあなた@Configurationファイルで、単に登録に属し

public final class YourEnumReadConverter implements Converter<String, YourEnum> { 
    @Override 
    public YourEnum convert(String source) { 
     return source == null ? null : Arrays.stream(YourEnum.values()). 
               filter(enumInstance -> enumInstance.name().equalsIgnoreCase(source.trim())). 
               findFirst(). 
               orElse(null); 
    } 
} 

と同じ:CustomConversionsが属する

@Bean 
public CustomConversions customConversions() { 
    List<Converter<?, ?>> converterList = new ArrayList<>(); 
    converterList.add(new YourEnumWriteConverter()); 
    converterList.add(new YourEnumReadConverter()); 
    return new CustomConversions(converterList); 
} 

org.springframework.data.mongodb.core.convert

これは問題を解決するはずです。ここで注目すべき重要な点は、アプリケーション内のすべての列挙型、またはアプリケーションに存在する特定の列挙型を小文字として永続化したい場合は、Converterのペアを個別に書くのではなく、ConverterFactoryと書くことをお勧めしますそれぞれの列挙型。

Mongo Custom Converters

Spring Type Conversion

Another useful SO question

:この答えは、とても参考になります ConverterFactory

いくつかのリンクの設定については、すでに長い間書いていません

関連する問題