MapStruct:当由@Named 注释时,列表映射不使用单个映射
MapStruct: List mapping is not using single mapping when annotated by @Named
我有以下映射器
@Mapper
@Named("RoleBaseMapper")
public interface RoleBaseMapper {
@Mapping(target = "code", source = "name")
@Named("mapToBase")
RoleGuiBaseDto mapToBase(Role role);
@Named("MapListToBase")
List<RoleGuiBaseDto> mapListToBase(List<Role> roles);
}
我期望 mapListToBase
将使用 mapToBase
映射列表中的每个条目。但是当我看到生成的代码时,我有以下
@Override
public List<RoleGuiBaseDto> mapListToBase(List<Role> roles) {
if ( roles == null ) {
return null;
}
List<RoleGuiBaseDto> list = new ArrayList<RoleGuiBaseDto>( roles.size() );
for ( Role role : roles ) {
list.add( roleToRoleGuiBaseDto( role ) );
}
return list;
}
protected RoleGuiBaseDto roleToRoleGuiBaseDto(Role role) {
if ( role == null ) {
return null;
}
RoleGuiBaseDto roleGuiBaseDto = new RoleGuiBaseDto();
roleGuiBaseDto.setId( role.getId() );
roleGuiBaseDto.setDescription( role.getDescription() );
return roleGuiBaseDto;
}
创建并使用了一个新的映射器方法,而不是使用 mapToBase
。
如何告诉 mapListToBase
使用 mapToBase
。
注意:没有 @Named
.
一切正常
使用@Named
时需要限定映射方法(使用@IterableMapping#qualifiedByName
):
@Mapper
@Named("RoleBaseMapper")
public interface RoleBaseMapper {
@Mapping(target = "code", source = "name")
@Named("mapToBase")
RoleGuiBaseDto mapToBase(Role role);
@IterableMapping(qualifiedByName = "mapToBase")
@Named("MapListToBase")
List<RoleGuiBaseDto> mapListToBase(List<Role> roles);
}
我有以下映射器
@Mapper
@Named("RoleBaseMapper")
public interface RoleBaseMapper {
@Mapping(target = "code", source = "name")
@Named("mapToBase")
RoleGuiBaseDto mapToBase(Role role);
@Named("MapListToBase")
List<RoleGuiBaseDto> mapListToBase(List<Role> roles);
}
我期望 mapListToBase
将使用 mapToBase
映射列表中的每个条目。但是当我看到生成的代码时,我有以下
@Override
public List<RoleGuiBaseDto> mapListToBase(List<Role> roles) {
if ( roles == null ) {
return null;
}
List<RoleGuiBaseDto> list = new ArrayList<RoleGuiBaseDto>( roles.size() );
for ( Role role : roles ) {
list.add( roleToRoleGuiBaseDto( role ) );
}
return list;
}
protected RoleGuiBaseDto roleToRoleGuiBaseDto(Role role) {
if ( role == null ) {
return null;
}
RoleGuiBaseDto roleGuiBaseDto = new RoleGuiBaseDto();
roleGuiBaseDto.setId( role.getId() );
roleGuiBaseDto.setDescription( role.getDescription() );
return roleGuiBaseDto;
}
创建并使用了一个新的映射器方法,而不是使用 mapToBase
。
如何告诉 mapListToBase
使用 mapToBase
。
注意:没有 @Named
.
使用@Named
时需要限定映射方法(使用@IterableMapping#qualifiedByName
):
@Mapper
@Named("RoleBaseMapper")
public interface RoleBaseMapper {
@Mapping(target = "code", source = "name")
@Named("mapToBase")
RoleGuiBaseDto mapToBase(Role role);
@IterableMapping(qualifiedByName = "mapToBase")
@Named("MapListToBase")
List<RoleGuiBaseDto> mapListToBase(List<Role> roles);
}