Spring mapper с Java Map - PullRequest
       35

Spring mapper с Java Map

2 голосов
/ 19 мая 2019

Я уже несколько часов бьюсь над следующей проблемой и не могу понять, как заставить ее работать:

Spring mapper, чтобы преобразовать ответ DB в 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: 

1 Ответ

1 голос
/ 20 мая 2019

Я думаю, вам нужно явно добавить методы для отображения всей цепочки классов. На вашем примере должно работать следующее:


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

    TeamResponseDTO toDto(TeamResponse teamResponse);

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

    NameAndTypeDTO nameAndTypeToDTO(NameAndType nameAndType);

}

С уважением, WiPu

...