MapStruct 只提供了隐式类型转换和默认的一些转换,假如需要特定的类型转换,如将 日期转换为只保留年月日的字符串等,可以自定义转换规则
方式一:使用 expression 表达式
- 1、创建一个转换规则类
public class Timestamp2String {
public static String trans(Timestamp date) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
return simpleDateFormat.format(date);
}
}
- 2、在映射器对应的转换方法上使用 @Mapping 注解的 expression 属性标识转换规则
@Mapper
public interface UserConverter{
UserConverter INSTANCE = Mappers.getMapper(UserConverter.class);
@Mapping(target = "createTime", expression = "java(.(()))")
@Mapping(target = "updateTime", expression = "java(.(()))")
public UserVO user2UserVO(User user);
}
注意:expression的属性值为需要写 全类名.方法名(参数)
方式二:使用 @Named 注解
- 1、创建一个转换规则类,在对应的转换方法上标注 @Named 注解表示转换方法名
public class Timestamp2String {
@Named("trans")
public static String trans(Timestamp date) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
return simpleDateFormat.format(date);
}
}
- 2、在映射器上使用 @Mapper 的 uses 属性,属性值为转换规则类的 Class 对象,然后再映射器对应的方法上使用 @Mapping 注解的 qualifiedByName 属性,属性值为转换规则类 @Named 定义的方法名
@Mapper( uses = Timestamp2String.class)
public interface UserConverter{
UserConverter INSTANCE = Mappers.getMapper(UserConverter.class);
@Mapping(target = "createTime", source = "createTime", qualifiedByName = "trans")
@Mapping(target = "updateTime", source = "updateTime", qualifiedByName = "trans")
public UserVO user2UserVO(User user);
}