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

防止Mapstruct重写方法

南宫兴德
2023-03-14

是否有一种方法可以防止Mapstruct重写我在映射器类中为其提供了实现的特定方法?

    null

我的映射器类如下所示:

public abstract class EntityMapper {

    public static final EntityMapper INSTANCE = Mappers.getMapper(EntityMapper.class);
    
    protected final Vehicle EntityDTOToVehicle(EntityDTO EntityDTO) {
        Vehicle vehicle = new Vehicle();

        //My Implementation Here

        return vehicle;
    }

    @Mapping(target = "vehicle.property1",  source = "vehicleProperty1")
    @Mapping(target = "vehicle.property2",  source = "vehicleProperty2")
    public abstract Entity map(EntityDTO dto);
}

然后,Mapstruct生成如下所示的实现:

@Component
public class EntityMapperImpl extends EntityMapper {

    @Override
    public Entity map(EntityDTO dto) {
        if ( dto == null ) {
            return null;
        }

        Entity entity = new Entity();
        .
        .
        .
        entity.setTransport( entityDTOToVehicle( dto ) );

        return entity;
    }

     /** 
     * This is the method I'd like to prevent mapstruct from overriding  */
    protected Vehicle entityDTOToVehicle(EntityDTO entityDTO) {
        Vehicle vehicle = new Vehicle();

        //Mapstruct's Implementation

        return vehicle;
    }
}

共有1个答案

张高澹
2023-03-14

必须在实现中使用@named

@Named(value = "mappingName")
protected Vehicle EntityDTOToVehicle(EntityDTO EntityDTO) {
    Vehicle vehicle = new Vehicle();

    //My Implementation Here

    return vehicle;
}

然后将其附加到抽象映射器:

@Mappings(value ={
    @Mapping(target = "vehicle.property1",  source = "vehicleProperty1")
    @Mapping(target = "vehicle.property2",  source = "vehicleProperty2")
    @Mapping(source = "fieldWithVehiclePropChangeItToYours", target = "transport", qualifiedByName = "mappingName"),
}
public abstract Entity map(EntityDTO dto);
 类似资料:
  • 我不明白为什么当我尝试编译这段代码时,编译器会显示错误: 在A和B类中,两种方法之间的区别在于返回类型,我读到Java阻止重写静态方法。所以我希望编译器不会显示任何错误,因为最初没有任何重写!!

  • 我有一个主类。应用程序中有许多子类是从类扩展而来的。base类公开公共方法,如下所示: 应用程序将在子实例上调用以获得一个检查器实例。每个子类都可以有自定义的基本检查器和验证检查器。他们可以使用和方法实现它,但是他们不能覆盖基类的,因为它包含处理逻辑。 在这里使用关键字合适吗?

  • 正如你所看到的,这就是我用MaterialBottomNavigation实现NavHost的方式,我在消息和提要屏幕上都有很多项目,当我在它们两个屏幕之间导航时,它们会自动重构,但我不想这样做,因为那里有很多数据,它在导航时闪烁和fps下降到10以下,我试图在NavHost之前初始化数据viewModels,但结果仍然相同, 有没有办法一次组成屏幕,并在viewModels数据更新时更新它们?

  • 我有一个Mapstruct映射器,在那里我必须做一些字符串转换服务。即,从自然语言短语列表到实用程序类中定义的不透明常量。不,我这次不使用枚举。它涉及一些Levenshtein检查和预定义的单词列表。 我在Spring bean中有一个方法,我想使用它来映射我的DTO中的单个字符串字段。 如果我在映射中使用Mapstruct的uses属性,我发现Mapstruct会滥用definedBean。ge

  • 本文向大家介绍Swift用final关键字来防止重写,包括了Swift用final关键字来防止重写的使用技巧和注意事项,需要的朋友参考一下 final关键字在大多数的编程语言中都存在,表示不允许对其修饰的内容进行继承或者重新操作。Swift中,final关键字可以在class、func和var前修饰。 通常大家都认为使用final可以更好地对代码进行版本控制,发挥更佳的性能,同时使代码更安全。下面

  • 问题内容: 我想创建一个表来存储设备设置。该表具有三行:id,parameter_name和parameter_value。 该表是通过执行以下查询语句创建的: 然后通过执行以下方法存储行: 创建数据库后,将存储默认值: 但是,方法insertRow()的问题在于它无法防止重复输入。 有谁知道在这种情况下如何防止重复输入? 问题答案: 您可以使用列约束。 UNIQUE约束导致在指定列上创建唯一索引