Я боролся со следующей проблемой в течение нескольких часов, и я не могу понять, как заставить ее работать:
Spring mapper, чтобы преобразовать ответ БД в DTO:
@Mapper(componentModel = "spring")
public interface ITeamResponseToDtoMapper {
TeamResponseDTO toDto(TeamResponse 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:
Что это за @Mapper? [mapper], которым вы отмечены, не имеет отношения.
Я думаю, это MapStruct маппер.




Я думаю, вам нужно явно добавить методы для сопоставления всей цепочки классов. В вашем примере должно работать следующее:
@Mapper(componentModel = "spring")
public interface ITeamResponseToDtoMapper {
TeamResponseDTO toDto(TeamResponse teamResponse);
List<NameAndTypeDTO> natListToDTO(List<NameAndType> natList);
NameAndTypeDTO nameAndTypeToDTO(NameAndType nameAndType);
}
с уважением, WiPu
Интересно, это действительно решило проблему. Спасибо тебе за это.
Если вы посмотрите на это, com.microservices.teamservice.api.dataobjects.NameAndTypeDTO и com.microservices.teamservice.dataobjects.NameAndType, оба класса с другим пакетом. Это означает, что вы получаете другой класс и пытаетесь сопоставить его с другим.