Несколько вложенных карт, использующих один и тот же тип ввода - PullRequest
0 голосов
/ 08 ноября 2018

Я пытаюсь построить DTO, разделенные на sub-DTO, получая информацию от одного и того же большого объекта. Для этого я разделил логику отображения на несколько субмапперов (по одному на суб-DTO).

Когда субмаппер использует тот же тип ввода, что и родительский, он каким-то образом игнорируется в генерации MapperImpl. Но когда тип ввода отличается, он работает как шарм.

public class MainDTO {
    Integer id;
    SubDTO1 subDTO1;
    SubDTO2 subDTO2;
}

@Mapper(uses = { SubMapper1.class, SubMapper2.class })
public interface MainMapper {
    MainDTO toDto(Entity entity);
}

@Mapper
public interface SubMapper1 {
    SubDTO1 toDto(Entity entity); // KO
}

@Mapper
public interface SubMapper2 {
    SubDTO2 toDto(OtherEntity entity); // OK
}

Сгенерированный MapperImpl:

@Component
public class MainMapperImpl implements MainMapper {
    @Autowired
    private SubMapper2 submapper2;

    // No Submapper1 !

    ....
}

Есть идеи, как я могу это исправить, не помещая всю логику отображения в MainDTO?

Спасибо за помощь.

1 Ответ

0 голосов
/ 17 ноября 2018

При условии, что OtherEntity равно Entity ... Я добавил несколько сопоставлений. И код, кажется, работает, как вы хотели.

@Mapping(target = "id", ignore = true)
@Mapping(target = "subDTO1", source = "entity")
@Mapping(target = "subDTO2", source = "entity")
MainDTO toDto(Entity entity);

Это компилируется в MainMapperImpl.class:

@Autowired
private SubMapper1 subMapper1;
@Autowired
private SubMapper2 subMapper2;

public MainMapperImpl() {
}

Если я не понял ваш вопрос, это должен быть ожидаемый результат.

Пожалуйста, оставьте комментарий, если я вас неправильно понял.

...