使用@Mapping表达式映射String到OffsetDateTime时编译报错求助
解决MapStruct中String转OffsetDateTime编译报错问题
方法一:通过@Mapper的imports属性指定导入类
修改@Mapper注解,添加imports参数显式声明需要导入的OffsetDateTime类,生成的实现类会自动包含该导入语句:
@Mapper(componentModel = "spring", collectionMappingStrategy = CollectionMappingStrategy.TARGET_IMMUTABLE, imports = java.time.OffsetDateTime.class) public interface InstanceMapper { @Mapping(target = "startDate", expression = "java(OffsetDateTime.parse(source.getStartDate()))") InstanceDTO toInstanceDTO(Instance source); @Mapping(target = "startDate", expression = "java(source.getStartDate().toString())") Instance toInstance(InstanceDTO source); }
方法二:在表达式中使用全限定类名
直接在expression中写出OffsetDateTime的完整包路径,无需额外导入:
@Mapping(target = "startDate", expression = "java(java.time.OffsetDateTime.parse(source.getStartDate()))") InstanceDTO toInstanceDTO(Instance source);
方法三:自定义转换方法(推荐)
在Mapper接口中定义默认转换方法,MapStruct会自动识别并使用该方法完成类型转换,代码可读性和维护性更强:
@Mapper(componentModel = "spring", collectionMappingStrategy = CollectionMappingStrategy.TARGET_IMMUTABLE) public interface InstanceMapper { default OffsetDateTime stringToOffsetDateTime(String dateStr) { return OffsetDateTime.parse(dateStr); } default String offsetDateTimeToString(OffsetDateTime date) { return date.toString(); } // 无需再用expression注解,MapStruct会自动匹配转换方法 InstanceDTO toInstanceDTO(Instance source); Instance toInstance(InstanceDTO source); }
内容的提问来源于stack exchange,提问作者Kins
相关产品推荐
相关产品推荐

