mapstruct中String映射list,String To List

文章介绍了在使用MapStruct进行对象转换时遇到的问题,即PO中的String字段需要转换成VO中的List。通过添加自定义的@Mapping表达式,并在辅助类中实现将逗号分隔的字符串转成List的方法,成功解决了转换异常。MapStruct的表达式映射功能在此处起到了关键作用。

代码开发中po转vo中用到了mapstruct。

第一次使用mapstruct,不是很熟悉,发现是po中的字段为String,vo中是List,所以报错转换异常。

最终解决方案如下:

@Mapper
public interface BrushMaterialConvert {

    @Mapping(target = "id", source = "aid")
    @Mapping(target = "name", source = "brushName")
    @Mapping(target = "preview", source = "previewAddress")
   //数据库中的brush是逗号隔开的字符串 vo中的dots是list
    @Mapping(target = "dots", expression = "java(MapStruct.strToList(bean.getBrush()))")
    AppBrushMaterialPageResVO convertResPageVO(BrushMaterialDO bean);

    PageResult<AppBrushMaterialPageResVO> convertResPage(PageResult<BrushMaterialDO> page);

    class MapStruct {
        public static List<String> strToList(String brush) {
            if (StringUtils.isNotEmpty(brush)) {
               return Arrays.asList(brush.split(","));
            }
            return null;
        }
    }

}

参考:https://www.cnblogs.com/mmzs/p/12735212.html

在使用 MapStruct 时,如果遇到 `@Named` 注解无法被识别的问题,尤其是在尝试进行字符串到列表(String to List)的换时,通常与注解未正确引入或类型换器未注册有关。 MapStruct 提供了多种方式来定义自定义类型换逻辑。当需要将字符串解析为列表时,可以通过实现 `org.mapstruct.ap.spi.MappingTypeProcessor` 接口来创建自定义处理器,或者使用 `@Mapper#uses()` 方法引用包含换方法的类[^1]。例如: ```java @Mapper public interface MyMapper { MyMapper INSTANCE = Mappers.getMapper(MyMapper.class); @Named("stringToList") default List<String> convertStringToList(String value) { return Arrays.asList(value.split(",")); } TargetObject sourceToTarget(SourceObject source); } ``` 在此示例中,`@Named("stringToList")` 注解用于标记一个默认方法作为映射方法的一部分,该方法可以被其他映射方法引用以执行特定的数据换任务[^1]。如果编译器报告 `@Named` 注解不可识别,则应检查以下几点: - 确认是否已经添加了正确的依赖项至项目构建文件(如 Maven 的 `pom.xml` 或 Gradle 的 `build.gradle`)。对于 `@Named` 注解,需要确保包含 `javax.inject` 相关的库。 - 检查 MapStruct 版本是否支持所使用的注解特性。较新的版本通常提供更好的兼容性和更多的功能。 - 如果使用的是 IDE(如 IntelliJ IDEA 或 Eclipse),可能需要重新启动 IDE 或刷新项目的依赖关系,以便识别新添加的注解处理器和库。 此外,在某些情况下,如果希望 MapStruct 自动应用特定的换规则而不显式指定每个映射方法,可以考虑使用 `@MapperConfig` 定义全局配置,其中可以包括默认的类型换策略[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值