当前位置: 首页 > 知识库问答 >
问题:

基于类型的MapStruct映射器

叶弘深
2023-03-14
Component {
   UUID id;
   String name;
}

MotherboardComponent extends Component {
    String type;
    List<Component> components;
}

谢谢

共有1个答案

林君博
2023-03-14

MapStruct在运行时不执行任何操作。它在编译时就会知道类型。

为了解决这个问题,您必须帮助它一点:

例如。

@Mapper
public abstract class MotherboardComponentMapper {

    public abstract MotherboardComponentDO map(MotherboardComponent component);

    public ComponentDO map(Component component) {
        if (component instanceof MotherboardComponent) {
            return map((MotherboardComponent) component);
        }

        return mapAsComponentDO(component);
    }

    @Named("asComponentDO")
    protected abstract ComponentDO mapAsComponentDO(Component component);

}
 类似资料:
  • 我想将泛型类型<code>Y</code>的对象映射到另一个泛型类型为<code>X</code>的对象。在mapstruct中有这样的功能吗?或者我必须为通用映射编写自定义映射器吗?当我编译上面的代码时,会出现编译错误。

  • 我正在使用Spring,并且在我的项目中从mapstruct库开始,所以我有了一个想法,为@mapper(componentModel=“Spring”)创建原型注释,比如@springmapper。但它不会生成任何映射器。 是不可能还是我做错了什么?

  • 我有一个场景,我必须使用Mapstrt将对象(来自网络请求)转换为对象(数据层)来处理对象映射。我正在尝试创建一个通用的接口,以防止必须为每个资源定义自定义映射器,如下所示: 但这会导致构建错误(但是编译成功): 错误:(13,4)错误:无法为泛型类型变量源生成映射方法。 这不可能吗?如果没有,我将不得不为每个创建一个自定义映射器,并使用根据类类型等告诉反序列化器要使用哪个映射器。。。它可能会变得

  • 我有麻烦映射一个嵌套dto字段正确与MapStruct。我有几个DTO: 具有相应的映射器 到目前为止,一切工作都很好,生成的代码自动连接其他需要的映射器来正确地构建DTO。例如生成的仪器映射器实现 现在,当我试图创建一个包含嵌套工具dto的映射器时遇到了麻烦。映射器应使用instrumentMapper正确创建所需的dto。DTO: 映射器: 生成的代码: 现在media mapper得到了很好

  • TL; DR 我想以一种从AbstractP的映射方式来使用ModelMapper,然后在ModelMapper-Config中为每个子类调用特定的映射器,然后跳过其余的(abstrac类)映射。 这怎么可能?这是正确的做法吗?是否存在设计缺陷? 我所拥有的: 母公司: 一个子实体: 另一个子实体: 然后我有父DTO类: 一个孩子DTO: 另一个DTO: 在我的例子中,我将从控制器获取DTO,并在