spring data mongodb enum mapping converter

时间:2016-08-22 12:29:54

标签: 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)

因为TELEPHONE没有出现在OrderOptionEnum

我希望代码返回null值

有什么想法吗?

此致

1 个答案:

答案 0 :(得分:2)

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