当泛型类型具有继承结构时如何在 Mapstruct 中映射集合
当泛型类型具有继承结构时,可以使用 MapStruct 的泛型映射功能来映射集合。具体步骤如下:
- 在源类型和目标类型中定义泛型类型及其继承关系,例如:
public class Source<T extends Base> {
private List<T> list;
//...
}
public class Target<T extends Base> {
private List<T> list;
//...
}
public class Base {
//...
}
public class Sub extends Base {
//...
}
- 定义泛型映射器,使用
@Mapper注解标注,并指定泛型映射类型,例如:
@Mapper(componentModel = "spring", uses = {SubMapper.class})
public interface SourceMapper<T extends Base, U extends Base> {
Target<U> map(Source<T> source);
}
- 定义子类型的映射器,用于处理子类型之间的映射关系,例如:
@Mapper(componentModel = "spring")
public interface SubMapper {
SubDto map(Sub sub);
}
- 在映射器接口中编写映射方法,使用
@Mapping注解指定映射关系,例如:
@Mapping(target = "list", source = "list", qualifiedBy = TypeConversion.class)
Target<U> map(Source<T> source);
@Named("TypeConversion")
default List<U> convert(List<T> list) {
return list.stream().map(this::mapToSub).collect(Collectors.toList());
}
U mapToSub(T source);
- 使用映射器进行映射,例如:
@Autowired
private SourceMapper<Sub, SubDto> sourceMapper;
Source<Sub> source = new Source<>();
source.setList(Arrays.asList(new Sub(), new Sub()));
Target<SubDto> target = sourceMapper.map(source);
通过上述步骤,即可在 MapStruct 中映射具有继承结构的泛型类型集合
原文地址: https://www.cveoy.top/t/topic/hjbZ 著作权归作者所有。请勿转载和采集!