Spring Data MongoDB 枚举映射转换器

7
我希望当Java代码从MongoDB加载不存在于枚举代码中的枚举值时,能够编写不会抛出异常的代码。
例如:
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选项,

我只想让代码返回null值。

有什么想法吗?

祝好。


我认为你需要创建一个自定义的ConverterFactory:https://dev59.com/questions/6Gct5IYBdhLWcg3wD5SU#30024621 - alexbt
这是旧的内容,但对您可能有所帮助(他包装了枚举):https://ghads.wordpress.com/2011/04/12/mongodb-and-java-enums - alexbt
1个回答

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接