【问题标题】:spring data mongodb enum mapping converterspring data mongodb枚举映射转换器
【发布时间】:2016-12-29 00:13:29
【问题描述】:

当 java 代码从 mongo 加载 enum 代码中不存在的枚举值时,我希望代码不会引发异常

示例:

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

我只是想让代码返回空值

有什么想法吗?

问候

【问题讨论】:

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


【解决方案1】:

你可以添加一个自定义转换器实现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

【讨论】:

    猜你喜欢
    • 2011-10-10
    • 2018-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-12
    • 2019-07-06
    相关资源
    最近更新 更多