重写从 orika 到 mapstruct 的集合映射

Rewriting collection mapping from orika to mapstruct

你能告诉我如何使用 @Mapping 重写从 orika 到 mapstruct 的映射吗?

factory.classMap(SomeEntity.class, SomeDto.class)
         .fieldAToB("items{innerItem.id}", "innerItemIds{}")
         .byDefault().register();

不使用额外的方法。

是否存在这样的写法

@Mapping(source = "items{innerItem.id}", target = "innerItemIds{}")
SomeDto map(SomeEntity entity);

我不完全了解 Orika 的工作原理。但是,在 MapStruct 中,您可以为映射提供 MapStruct 无法执行的自定义方法。没有别的办法,不用额外的方法。

在您的情况下,您需要执行以下操作:

@Mapper
public interface MyMapper {


    @Mapping(target = "innerItemIds", source = "items")
    SomeDto map(SomeEntity entity);

    default String map(InnterItem item) {
        return item == null ? null : item.getId();
    }

}

您将使用 @Mapping 告诉 MapStruct 它需要将 items 集合映射到 innerItemIds。我假设 itemsCollection<InnerItem>innerItemIdsCollection<String>.