Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用java中的orika映射器将字符串转换为枚举_Java_Enums_Orika - Fatal编程技术网

使用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());
            ....
    }
}