You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用@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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 03:40:05