我正在尝试将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的情况下解决此问题?
感谢您的帮助。
答案 0 :(得分:1)
假设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() {
}
除非我误解了您的问题,否则这应该是预期的结果。
如果我误解了您,请发表评论。