gpt4 book ai didi

java - 当其中一个属性是枚举且两个类具有不同支持值时,Orika 映射器

转载 作者:太空宇宙 更新时间:2023-11-04 09:29:08 24 4
gpt4 key购买 nike

我有一个名为 Source 的对象,其中包含以下字段:

firstName,
lastName,
type (enum with possible values as "RED", "GREEN", "BLUE")
..
..

我有另一个对象Dest,其中包含以下字段:

firstName
lastName
type (enum with possible values as "RED", "GREEN", "PURPLE")
..
..

我想将Source复制到Destination并使用Orika来实现

MapperFacade mapper = mapperFactory.getMapperFacade();
Dest dest = mapper.map(src, Dest.class);

现在,当src.getType=BLUE时,我得到MappingException,因为Dest.class中的类型不支持BLUE值。

我无法更改这两个类的枚举支持的值。但与此同时,我需要找到一种方法来复制其他属性的值。我需要一种方法,以便它可以忽略复制 type 的值(这为其他枚举不支持的值提供映射异常),并且仍然复制其他值。我尝试使用“排除”,但它并没有真正解决问题。关于如何解决这个问题有什么想法吗?

最佳答案

您可以创建专注于Enum <-> Enum的自定义转换器。 ;

public class CustomEnumConverter extends CustomConverter<Enum, Enum> {

public boolean canConvert(Type<?> sourceType, Type<?> destinationType) {
return sourceType.isEnum() && destinationType.isEnum();
}

public Enum convert(Enum source, Type<? extends Enum> destinationType, MappingContext context) {
try {
return Enum.valueOf(destinationType.getRawType(), source.name());
} catch (IllegalArgumentException ignored) {
return null;
}
}
}

然后注册到mapperFactory通过;

ConverterFactory converterFactory = mapperFactory.getConverterFactory();
converterFactory.registerConverter(new CustomEnumConverter());

因此我可以做到这一点;

ObjA src = new ObjA();
src.setColor(ObjA.EnumA.BLUE);
ObjB dest = mapper.map(src, ObjB.class);
System.out.println(dest); // prints out ObjB(color=null)

src.setColor(ObjA.EnumA.GREEN);
dest = mapper.map(src, ObjB.class);
System.out.println(dest); // prints out ObjB(color=GREEN)

关于java - 当其中一个属性是枚举且两个类具有不同支持值时,Orika 映射器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57318569/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com