您提供的示例可能不是模型映射器最流畅的部分,特别是因为转换enum
使用泛型有一些特殊的困难。
无论如何,这是可能的Converter
或者通常AbstractConverter
.
您没有提供枚举示例,因此我创建了最简单的示例枚举:
enum Color {
PINK;
}
and
enum Category {
MAMMAL;
}
转换Integer Animal.category
to String AnimalDto.category
,转换器可能是这样的:
public class CategoryToStringConverter extends AbstractConverter<Integer, String> {
@Override
protected String convert(Integer source) {
return Category.values()[source].toString();
}
}
并进行转换String Animal.color
to Integer AnimalDto.category
,转换器可能是这样的:
public class ColorToOrdinalConverter extends AbstractConverter<String, Integer> {
@Override
protected Integer convert(String source) {
return Color.valueOf(source).ordinal();
}
}
用法如下:
mm.createTypeMap(Animal.class, AnimalDto.class).addMappings(mapper -> {
mapper.using(new CategoryToStringConverter()).map(Animal::getCategory,
AnimalDto::setCategory);
mapper.using(new ColorToOrdinalConverter()).map(Animal::getColor,
AnimalDto::setColor);
});
这是从以下内容转换的部分Animal
to AnimalDto
。反之亦然的转换当然需要它自己的映射,我在这里不介绍它,因为我认为这一点很清楚。
对于一门课程,您现在的做法可能会更好,但如果您需要转换Category
& Color
在许多这样的地方,您应该考虑使用可重复使用的转换器。