我需要一个类的映射结构映射,该类具有要映射到目标类的对象列表,如下所示:
//Source class:
public class VoucherTransaction {
private List<Voucher> vouchers;
}
//TargetClass
public class VoucherTransactionServiceDTO {
private List<UUID> voucherIds;
private List<String> voucherSerials;
}
public class Voucher {
private UUID id;
private String serial;
}
Run Code Online (Sandbox Code Playgroud)
如果您定义可以在不同列表类型之间进行映射的方法,或者列表中的对象与其他对象之间的映射,mapstruct 将识别它们并进行映射。
例如
@Mapper
public interface VoucherTransactionMapper {
@Mapping(target = "voucherIds", source = "vouchers")
@Mapping(target = "voucherSerials", source = "vouchers")
public VoucherTransactionServiceDTO map(VoucherTransaction transaction);
default UUID voucherToUuid(Voucher voucher) {
return voucher != null ? voucher.getId() : null;
}
default String voucherToSerial(Voucher voucher) {
return voucher != null ? voucher.getSerial() : null;
}
}
Run Code Online (Sandbox Code Playgroud)
然后,MapStruct 将生成List<Voucher>
和List<UUID>
之间的映射,List<Voucher>
并List<String>
使用映射器中定义的默认方法来执行映射。
您还可以定义列表映射方法,MapStruct 将使用它们:
例如
@Mapper
public interface VoucherTransactionMapper {
@Mapping(target = "voucherIds", source = "vouchers")
@Mapping(target = "voucherSerials", source = "vouchers")
public VoucherTransactionServiceDTO map(VoucherTransaction transaction);
default List<UUID> vouchersToUuids(List<Voucher> vouchers) {
if (vouchers == null) {
return null;
}
return vouchers.stream().map(Voucher::getId).collect(Collectors.toList());
}
default List<UUID> vouchersToSerials(List<Voucher> vouchers) {
if (vouchers == null) {
return null;
}
return vouchers.stream().map(Voucher::getSerial).collect(Collectors.toList());
}
}
Run Code Online (Sandbox Code Playgroud)
对于更高级的用法,您可以使用基于限定符的映射方法选择
归档时间: |
|
查看次数: |
4884 次 |
最近记录: |