2017-02-19 118 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