当泛型类型具有继承结构时,可以使用 MapStruct 的泛型映射功能来映射集合。具体步骤如下:

  1. 在源类型和目标类型中定义泛型类型及其继承关系,例如:
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 {
    //...
}
  1. 定义泛型映射器,使用 @Mapper 注解标注,并指定泛型映射类型,例如:
@Mapper(componentModel = "spring", uses = {SubMapper.class})
public interface SourceMapper<T extends Base, U extends Base> {
    Target<U> map(Source<T> source);
}
  1. 定义子类型的映射器,用于处理子类型之间的映射关系,例如:
@Mapper(componentModel = "spring")
public interface SubMapper {
    SubDto map(Sub sub);
}
  1. 在映射器接口中编写映射方法,使用 @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);
  1. 使用映射器进行映射,例如:
@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 中映射具有继承结构的泛型类型集合

当泛型类型具有继承结构时如何在 Mapstruct 中映射集合

原文地址: https://www.cveoy.top/t/topic/hjbZ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录