可以使用 expression 属性在 @Mapping 注解中指定自定义的表达式。
示例场景:假设我们有一个场景,需要将一个包含日期字符串的源对象转换为目标对象,并且需要将日期字符串解析为 java.util.Date 对象。我们将使用 java.text.SimpleDateFormat 类来解析日期字符串。
public class Source {
private String dateString;
// getters and setters
}
public class Target {
private Date date;
// getters and setters
}
定义日期解析工具类
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateParser {
private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd");
public static Date parse(String dateString) throws ParseException {
return DATE_FORMAT.parse(dateString);
}
}
定义Mapper接口,注意注解中的imports和expression
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Mappings;
import org.mapstruct.factory.Mappers;
@Mapper(componentModel = "spring", imports = {DateParser.class, ParseException.class})
public interface SourceTargetMapper {
SourceTargetMapper INSTANCE = Mappers.getMapper(SourceTargetMapper.class);
@Mappings({
@Mapping(target = "date", expression = "java(DateParser.parse(source.getDateString()))")
})
Target sourceToTarget(Source source) throws ParseException;
}
在这个 Mapper接口
中,使用了 imports
属性导入了 DateParser 和 ParseException 类。然后在 @Mapping
注解的 expression
属性中,通过 DateParser.parse(source.getDateString()) 来将 dateString 转换为 Date 对象。
public class Main {
public static void main(String[] args) {
Source source = new Source();
source.setDateString("2024-11-25");
SourceTargetMapper mapper = SourceTargetMapper.INSTANCE;
try {
Target target = mapper.sourceToTarget(source);
System.out.println("Target Date: " + target.getDate());
} catch (ParseException e) {
e.printStackTrace();
}
}
}
在这个示例中,创建了一个包含日期字符串的 Source 对象,并使用 SourceTargetMapper 将其转换为 Target 对象。转换过程中,DateParser 类的 parse 方法被调用,将日期字符串解析为 Date 对象。
依赖:
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>1.5.5.Final</version> <!-- 请根据需要替换为最新版本 -->
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>1.5.5.Final</version> <!-- 请根据需要替换为最新版本 -->
<scope>provided</scope>
</dependency>