MapStruct 将实体列表转换为具有 DTO 列表的单个对象

问题描述 投票:0回答:2

早上好, 我目前正在使用 mapStruct,我想为以下对象制作一个映射器

public class StatusReasonResponse {
    private final List<StatusReasonDTO> statusReasons;
}

public class StatusReasonDTO {
    private Integer id;
    private String code;
    private String name;
    private Boolean active;
    private String type;
}

public class StatusReason {
    private final int id;
    private final String code;
    private final String name;
    private final boolean active;
    private final StatusReasonType type;
}

我写了一个像这样的映射器

@Mapper(componentModel = "spring") 公共接口 ITestList

我想要这样的台词:

StatusReasonDTO 响应 = mapperToRespone(Listof(StatusReasonList))

像这样的映射器?

@Mapping(来源=“StatusReasonList”,目标=“statusReasons”) StatusReasonResponse toResponse(StatusReason statusReason, List statusReasonList);

java mapstruct
2个回答
0
投票

这是一个如何为给定对象编写 MapStruct 映射器的示例:

@Mapper(componentModel = "spring")
public interface StatusReasonMapper {

    @Mapping(source = "id", target = "id")
    @Mapping(source = "code", target = "code")
    @Mapping(source = "name", target = "name")
    @Mapping(source = "active", target = "active")
    @Mapping(source = "type", target = "type")
    StatusReasonDTO toDto(StatusReason entity);

    @Mapping(source = "id", target = "id")
    @Mapping(source = "code", target = "code")
    @Mapping(source = "name", target = "name")
    @Mapping(source = "active", target = "active")
    @Mapping(source = "type", target = "type")
    StatusReason toEntity(StatusReasonDTO dto);

    @Mapping(source = "statusReasons", target = "statusReasons")
    StatusReasonResponse toResponse(List<StatusReasonDTO> statusReasons);

    default List<StatusReasonDTO> toDtoList(List<StatusReason> entities) {
        if (entities == null) {
            return null;
        }

        List<StatusReasonDTO> dtos = new ArrayList<>();
        for (StatusReason entity : entities) {
            dtos.add(toDto(entity));
        }
        return dtos;
    }

    default List<StatusReason> toEntityList(List<StatusReasonDTO> dtos) {
        if (dtos == null) {
            return null;
        }

        List<StatusReason> entities = new ArrayList<>();
        for (StatusReasonDTO dto : dtos) {
            entities.add(toEntity(dto));
        }
        return entities;
    }
}

使用此映射器,您可以使用 toDto 和 toEntity 方法轻松地在 StatusReason 和 StatusReasonDTO 对象之间进行转换。您还可以使用 toDtoList 和 toEntityList 方法来转换对象列表。

要将 List 转换为 StatusReasonResponse,可以使用 toResponse 方法,如下所示:

StatusReasonMapper mapper = Mappers.getMapper(StatusReasonMapper.class);
List<StatusReason> statusReasonList = ...; // initialize list
StatusReasonResponse response = new StatusReasonResponse(mapper.toDtoList(statusReasonList));

0
投票

要从

List<StatusReason>
映射到
StatusReasonResponse
,需要定义一个映射器,将列表中的每个
StatusReason
映射到一个
StatusReasonDTO
,然后设置
StatusReasonDTO
中的
StatusReasonResponse
的列表。

这是一个示例映射器接口:

@Mapper(componentModel = "spring")
public interface StatusReasonMapper {
    StatusReasonDTO toDTO(StatusReason statusReason);
    List<StatusReasonDTO> toDTOList(List<StatusReason> statusReasons);
    StatusReasonResponse toResponse(List<StatusReason> statusReasons);
}

toDTO
方法将单个
StatusReason
对象映射到一个
StatusReasonDTO
toDTOList
方法将
StatusReason
对象列表映射到
StatusReasonDTO
对象列表。
toResponse
方法将
StatusReason
对象列表映射到
StatusReasonResponse
对象。

以下是使用映射器的方法:

List<StatusReason> statusReasons = ...; // initialize the list
StatusReasonMapper mapper = ...; // initialize the mapper

StatusReasonResponse response = new StatusReasonResponse();
response.setStatusReasons(mapper.toDTOList(statusReasons));

在这个例子中,你创建了一个新的

StatusReasonResponse
对象,并通过调用mapper的
StatusReasonDTO
方法来设置它的
toDTOList
对象列表。请注意,您需要在
StatusReasonResponse
对象上调用'setStatusReasons'方法来设置
StatusReasonDTO
对象的列表。

© www.soinside.com 2019 - 2024. All rights reserved.