2017-02-19 49 views
1

使用Spring Boot,我公開了一個REST API,它接受我的域對象作爲JSON正文並嘗試將其保存到Mongo文檔。我如何接受JSON請求中這個枚舉的小寫值,並將它們以小寫形式保存到Mongo中?使用Spring Boot從API到Mongo的小寫枚舉值

回答

0

關於接受枚舉的小寫值,你可以參考this answer

關於將它們保存到MongoDB的小寫字母,以及,你需要編寫自定義的轉換器和註冊相同。

典型寫入轉換器可以是這樣的:

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

您還需要編寫相應的閱讀器讀取小寫的字符串,從數據庫成功枚舉。一個典型的讀取器會看起來像:

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); 
    } 
} 

其中Converter屬於包org.springframework.core.convert.converter

,然後在@Configuration文件,只需註冊一樣:

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

其中CustomConversions屬於org.springframework.data.mongodb.core.convert

這應該可以解決您的問題。這裏需要注意的一件重要的事情是,如果你想在你的應用程序中使用所有枚舉,或者應用程序中存在的一組特定的枚舉可以保持爲小寫,那麼我建議編寫ConverterFactory而不是單獨編寫一對Converter每個這樣的枚舉。這個答案已經很長,所以沒有寫關於設立ConverterFactory

一些鏈接,這將是有益的:

Mongo Custom Converters

Spring Type Conversion

Another useful SO question