spring 数据 mongodb 枚举映射转换器
spring data mongodb enum mapping converter
当 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
我只想要代码 return 空值
有什么想法吗?
此致
您可以添加自定义转换器实现 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
当 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
我只想要代码 return 空值
有什么想法吗?
此致
您可以添加自定义转换器实现 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