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

Java 使用相同输入类型的多个子映射器,java,mapstruct,Java,Mapstruct,我试图将DTO分为子DTO,从同一个大对象获取信息。为此,我将映射逻辑拆分为多个子映射(每个子DTO一个子映射) 当子映射使用与父映射相同的输入类型时,它在MapperImpl生成中会被忽略。但是当输入类型不同时,它就像一个符咒 public class MainDTO { Integer id; SubDTO1 subDTO1; SubDTO2 subDTO2; } @Mapper(uses = { SubMapper1.class, SubMapper2.class

我试图将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的情况下解决这个问题吗


谢谢你的帮助。

假设
其他实体
实体
。。。 我添加了一些映射。代码似乎按照您的预期工作

@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() {
}
除非我误解了你的问题,否则这应该是预期的结果


如果我误解了你的意思,请留下评论。

我不确定我是否理解。这个
OtherEntity
来自哪里,它是
Entity
的一部分还是其他东西?@Filip在我的例子中是的,
OtherEntity
Entity
的一部分。但我的问题更多的是理解为什么我不能使用与主映射器相同的输入类型的子映射器(
实体
,这是一个怪物对象,有几十个字段,我正试图在一个好的域对象中分离)。很抱歉,回答晚了,我一直忙于其他事情。我已经尝试过你的解决方案,效果非常好。谢谢你的帮助!:)