使用相同输入类型的多个子映射器

时间:2018-11-08 14:02:06

标签: java mapstruct

我正在尝试将DTO分为多个子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 :(得分:1)

假设OtherEntityEntity ... 我添加了一些映射。代码似乎按预期工作。

@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() {
}

除非我误解了您的问题,否则这应该是预期的结果。

如果我误解了您,请发表评论。