带有Java映射的Spring映射器

带有Java映射的Spring映射器,java,spring,lombok,mapper,Java,Spring,Lombok,Mapper,我已经为以下问题苦苦挣扎了几个小时,但我不知道如何使其工作: Spring映射器,用于将DB响应转换为DTO: @Mapper(componentModel = "spring") public interface ITeamResponseToDtoMapper { TeamResponseDTO toDto(TeamResponse teamResponse); } 团队响应类: @Data @NoArgsConstructor public class TeamRespons

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

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

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

    TeamResponseDTO toDto(TeamResponse teamResponse);

}
团队响应类:

@Data
@NoArgsConstructor
public class TeamResponse {

    private Map<String, List<NameAndType>> teamList;
}
团队响应到课堂:

@Data
@NoArgsConstructor
public class TeamResponseDTO {

    private Map<String, List<NameAndTypeDTO >> teamList;
}
@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: 
错误:无法将属性“java.util.map teamList”映射到“java.util.map teamList”。考虑声明/实现映射方法:

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


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

    TeamResponseDTO toDto(TeamResponse teamResponse);

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

    NameAndTypeDTO nameAndTypeToDTO(NameAndType nameAndType);

}


@映射器(componentModel=“spring”)
公共接口ITeamResponseToDtoMapper{
teamresponsedTodto(TeamResponse TeamResponse);
List-natlistto(List-natList);
名称和类型到名称和类型到(名称和类型名称和类型);
}
问候,,
WiPu

如果您查看它,com.microservices.teamservice.api.dataobjects.nameandto和com.microservices.teamservice.dataobjects.NameAndType都使用不同的包。这意味着你将获得不同的类,并试图映射到另一个类。这是哪个
@Mapper
?您标记的
[mapper]
是不相关的。我猜它是
MapStruct
mapper。有趣的是,这实际上解决了这个问题。谢谢你。

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

    TeamResponseDTO toDto(TeamResponse teamResponse);

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

    NameAndTypeDTO nameAndTypeToDTO(NameAndType nameAndType);

}