Spring data mongodb enum映射转换器



我希望代码在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>在那里你实现自己的转换逻辑从字符串到你的enum。

像这样的

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

最新更新