我正在使用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
我可以建议以下方法:
@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
的包装类。