首页 > 解决方案 > 带有 Java Map 的 Spring 映射器

问题描述

我已经为以下问题苦苦挣扎了几个小时,但我不知道如何使它工作:

Spring 映射器,为了将 DB 响应转换为 DTO:

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

    TeamResponseDTO toDto(TeamResponse teamResponse);

}

团队响应类:

@Data
@NoArgsConstructor
public class TeamResponse {

    private Map<String, List<NameAndType>> teamList;
}

NameAndType 类:

@Data
@NoArgsConstructor
@AllArgsConstructor(access = AccessLevel.PUBLIC)
public class NameAndType{

    private String name;
    private String type;
    private String team;
}

TeamResponseDTO 类:

@Data
@NoArgsConstructor
public class TeamResponseDTO {

    private Map<String, List<NameAndTypeDTO >> teamList;
}

NameAndTypeDTO 类:

@Data
@NoArgsConstructor
@AllArgsConstructor(access = AccessLevel.PUBLIC)
public class NameAndTypeDTO {

    private String name;
    private String type;
    private String team;
}

基本上,'NameAndType' 和 'NameAndTypeDTO' 是相同的,为什么它无法进行转换?

error: Can't map property "java.util.Map<java.lang.String,java.util.List<com.microservices.teamservice.dataobjects.NameAndType>> teamList" to "java.util.Map<java.lang.String,java.util.List<com.microservices.teamservice.api.dataobjects.NameAndTypeDTO>> teamList". Consider to declare/implement a mapping method: 

标签: javaspringlombokmapper

解决方案


我认为您需要显式添加方法来映射整个类链。在您的示例中,以下内容应该有效:


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

    TeamResponseDTO toDto(TeamResponse teamResponse);

    List<NameAndTypeDTO> natListToDTO(List<NameAndType> natList);

    NameAndTypeDTO nameAndTypeToDTO(NameAndType nameAndType);

}

问候, 维普


推荐阅读