2

I've been struggling with the following issue for a few hours now, and I can't figure it out how to make it work:

Spring mapper, in order to convert DB response to DTO:

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

    TeamResponseDTO toDto(TeamResponse teamResponse);

}

TeamResponse class:

@Data
@NoArgsConstructor
public class TeamResponse {

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

NameAndType class:

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

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

TeamResponseDTO class:

@Data
@NoArgsConstructor
public class TeamResponseDTO {

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

NameAndTypeDTO class:

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

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

Basically, 'NameAndType' and 'NameAndTypeDTO' are the same, why it fails to do the conversion?

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: 
Sambit
  • 7,625
  • 7
  • 34
  • 65
user3819295
  • 861
  • 6
  • 19

1 Answers1

1

I think you need to explicit add methods to map the whole chain of classes. On your example the following should work:


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

    TeamResponseDTO toDto(TeamResponse teamResponse);

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

    NameAndTypeDTO nameAndTypeToDTO(NameAndType nameAndType);

}

regards, WiPu

WiPU
  • 443
  • 2
  • 9