我正在使用 MapStruct 在具有依赖项注入的 Spring 应用程序中从 JPA 实体映射到 POJO DTO。
我已将 DTO 的一些额外处理添加到doc 中指定的装饰器中的方法中。
它适用于映射单个实体。但是我也有这些实体的集合(集合)的映射,并且当在关系中找到这些实体的集合时会自动调用该方法。
但是生成的集合映射方法不使用装饰方法来映射每个实体,只是使用委托上的“vanilla”生成方法。这是生成方法的代码:
@Override
public Set<DimensionItemTreeDTO> missionSetToTreeDtoSet(Set<Mission> set) {
return delegate.missionSetToTreeDtoSet( set );
}
委托方法本身不知道装饰器并在其自身上调用单个项目映射方法:
@Override
public Set<DimensionItemTreeDTO> missionSetToTreeDtoSet(Set<Mission> set) {
if ( set == null ) {
return null;
}
Set<DimensionItemTreeDTO> set__ = new HashSet<DimensionItemTreeDTO>();
for ( Mission mission : set ) {
set__.add( missionToTreeDto( mission ) ); //here the decorator is not called !
}
return set__;
}
...并且永远不会为集合中的项目调用装饰方法。
有没有一种方法可以让 Mapstruct 在集合映射中使用装饰器方法,而不是在我的装饰器中手动编写集合方法(这有效但很冗长,并且违背了首先拥有 MapStruct 的目的,而不必写这种代码)?