首页 > 解决方案 > Mapstruct 忽略 @BeanMappingqualifiedByName

问题描述

我正在尝试将分离的@AfterMaping/@BeforeMapping方法用于 2 种方法:toDtoand toPartialDto,但 MapStruct 会生成代码,其中使用了所有@AfterMaping/@BeforeMapping方法。我尝试将我的抽象类重新设计为接口,但问题仍然存在。

    @BeanMapping(qualifiedByName = {"method1", "method2", "method3"})
    public abstract MyDto toDto(MyEntity entity);

    @Named("toPartialDto")
    @BeanMapping(ignoreByDefault = true, qualifiedByName = {"method3", "method4"})
    public abstract MyDto toPartialDto(MyEntity entity);

    @Named("method1")
    @BeforeMapping
    protected void setField1Data(@MappingTarget MyDto target, MyEntity entity) {
       //some code
    }

    @Named("method2")
    @AfterMapping
    protected void updateDto(@MappingTarget MyDto target, MyEntity entity) {
         //some code
    }

    @Named("method3")
    @AfterMapping
    protected void resolveOwn(@MappingTarget MyDto dto) {
       //some code
    }

    @Named("method4")
    @AfterMapping
    protected void mapPartial(@MappingTarget MyDto target, MyEntity entity) {
       //some code
    }

标签: javamapstruct

解决方案


MapStruct 不会忽略qualifiers. 当您在BeanMapping#qualifiedByNameMapStruct 中定义多个限定符时,将尝试匹配所有这些限定符。这主要是为了让特定的合格类具有合格的方法。


推荐阅读