使用MapStruct条件映射来控制是否忽略目标属性

问题描述 投票:0回答:1

我正在使用mapStruct库,并且我有这个Mapper类:

@Mapper(componentModel = "spring")
public interface MenuLanguageMapper {

      MenuLanguageViewDTO toViewFromEntity(MenuLanguage entity);

      List<MenuLanguageViewDTO> toViewListFromEntityList(List<MenuLanguage> entityList);
}

MenuLanguage
MenulanguageViewDTO
都有一个名为
id
的字段,我想控制是否要在目标中忽略它,因为在我的一些MenuLanguageViewDTO中我想包含“id”,而不是必须创建全新的方法来做到这一点,这可能吗?我发现了条件映射,但我似乎无法让它工作,mapStruct 声明它现在支持条件映射:mapStruct Documentations

java mapstruct
1个回答
0
投票

我可以建议以下方法:

@Mapper(componentModel = "spring")
public interface MenuLanguageMapper {

    default MenuLanguageViewDTO toViewFromEntity(MenuLanguage entity, boolean ignoreId) {
        return ignoreId
            ? toViewFromEntityWithoutId(entity)
            : toViewFromEntityWithId(entity);
    }

    @Mapping(target = "id", ignore = true)
    MenuLanguageViewDTO toViewFromEntityWithoutId(MenuLanguage entity);

    MenuLanguageViewDTO toViewFromEntityWithId(MenuLanguage entity);

}

或者,如果您不想在界面中看到“内部”方法,您可以创建一个将注入

MenuLanguageMapper
的包装类。

© www.soinside.com 2019 - 2024. All rights reserved.