使用Spring Boot,我暴露了一个REST API,它接受我的域对象作为JSON主体,并尝试将其持久化到Mongo文档。如何在JSON请求中接受此枚举的小写值和将它们以小写形式保存为Mongo?
答案 0 :(得分:1)
关于接受枚举的小写值,您可以参考wikipedia definition
关于将它们以小写形式保存到MongoDB,您需要编写自定义转换器并注册它们。
典型的写入转换器可以是:
public final class YourEnumWriteConverter implements Converter<YourEnum, String> {
@Override
public String convert(YourEnum source) {
return source == null ? "" : source.name().toLowerCase();
}
}
您还需要编写相应的读取转换器,以便从DB成功读取小写字符串作为枚举。典型的读取转换器如下所示:
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
一些有用的链接: