Spring Mapper с картой Java

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

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: 

Если вы посмотрите на это, com.microservices.teamservice.api.dataobjects.NameAndTypeDTO и com.microservices.teamservice.dataobjects.NameAndType, оба класса с другим пакетом. Это означает, что вы получаете другой класс и пытаетесь сопоставить его с другим.

Sambit 19.05.2019 16:48

Что это за @Mapper? [mapper], которым вы отмечены, не имеет отношения.

chrylis -cautiouslyoptimistic- 19.05.2019 17:00

Я думаю, это MapStruct маппер.

Michał Krzywański 19.05.2019 17:16
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
3
714
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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


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

    TeamResponseDTO toDto(TeamResponse teamResponse);

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

    NameAndTypeDTO nameAndTypeToDTO(NameAndType nameAndType);

}

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

Интересно, это действительно решило проблему. Спасибо тебе за это.

user3819295 20.05.2019 11:40

Другие вопросы по теме