使用java中的orika映射器将字符串转换为枚举
我有一个枚举类使用java中的orika映射器将字符串转换为枚举,java,enums,orika,Java,Enums,Orika,我有一个枚举类 public enum ProductLocaleEnum { EN_US("en_US"), FR_FR("fr_FR"), ES_ES("es_ES"); private String locale; ProductLocaleEnum(String locale) { this.locale = locale; } public String getLocale() { return locale;
public enum ProductLocaleEnum {
EN_US("en_US"), FR_FR("fr_FR"), ES_ES("es_ES");
private String locale;
ProductLocaleEnum(String locale) {
this.locale = locale;
}
public String getLocale() {
return locale;
}
}
我有一个目标类,其中一个属性被定义为ProductLocaleEnum类型
public class IssuingAuthorityDestination {
private String name;
private ProductLocaleEnum locale;
}
我的消息来源如下:
public class IssuingAuthoritySource {
private String name;
private String locale;
}
当我尝试使用Orika mapper从源映射到目标时,我得到一个错误
Caused by: java.lang.IllegalArgumentException: No enum constant com.accenture.helix.catalog.bean.ProductLocaleEnum.en_US.
如何在从源映射到目标时将字符串转换为枚举 您需要实现从CustomConverter继承并将字符串转换为枚举的converter类。 在您的情况下,它应该如下所示:
public class StringToProductLocaleEnumConverter extends CustomConverter<String, ProductLocaleEnum> {
@Override
public ProductLocaleEnum convert(String source, Type<? extends ProductLocaleEnum> destinationType, MappingContext mappingContext) {
return Arrays.stream(ProductLocaleEnum.values()).filter(p -> p.getLocale().equals(source)).findFirst().orElse(null);
}
}
您需要扩展CustomMapper抽象类,并重写mapAtoB和mapBtoA方法。
private class ProductMapper extends ConfigurableMapper {
@Override
protected void configure(MapperFactory factory) {
ConverterFactory converterFactory = factory.getConverterFactory();
converterFactory.registerConverter(new StringToProductLocaleEnumConverter());
....
}
}