spring data mongodb 枚举映射转换器

标签 spring spring-boot spring-data spring-data-mongodb mongodb-java

当java代码从mongo加载枚举代码中不存在的枚举值时,我希望代码不抛出异常

示例:

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)

因为 OrderOptionEnum 中不存在 TELEPHONE

我只是希望代码返回空值

有什么想法吗?

问候

最佳答案

您可以添加自定义转换器工具 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 中的每个字符串转换为您的枚举,因此可能会导致不需要的转换,因此请确保仅在需要时才执行此操作。 您可以添加@ReadingConverter如果您只想在从 mongo 读取时进行此转换。

关于spring data mongodb 枚举映射转换器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39079608/

相关文章:

spring - Spring Boot 2.0.2.RELEASE 的模型验证异常

java - Spring - @Value 返回 null

java - Vaadin Binder 中的上传组件,例如粗略编辑器

java - Thymeleaf 复选框未传递值

elasticsearch - ElasticsearchTemplate-为什么对某些操作隐式使用indexName而对其他操作则隐式使用

java - Spring 。使用@Bean 注册方面

java - 读提交和幻读(Spring)

Java返回空列表而不是对象

javascript - Angular 和 Spring Boot App 上的奇怪图标

redis - Spring Data Redis 和 Jedis 兼容性问题