添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
阅读1分钟

MapStruct 只提供了隐式类型转换和默认的一些转换,假如需要特定的类型转换,如将 java.sql.Timestamp 日期转换为只保留年月日的字符串等,可以自定义转换规则

方式一:使用 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(com.hc.util.Timestamp2String.trans(user.getCreateTime()))")
@Mapping(target = "updateTime", expression = "java(com.hc.util.Timestamp2String.trans(user.getUpdateTime()))")
public UserVO user2UserVO(User user);
注意:expression的属性值为需要写 全类名.方法名(参数)

方式二:使用 @Named 注解

1、创建一个转换规则类,在对应的转换方法上标注 @Named 注解表示转换方法名

public class DateToLongConverter {
     * 时间转long
     * @param dateTime
     * @return
    @Named("dateToLong")
    public Long  jsonStringToObject(LocalDateTime dateTime) {
        long milli = dateTime.toInstant(ZoneOffset.of("+8")).toEpochMilli();
        return milli;

2、在映射器上使用 @Mapper 的 uses 属性,属性值为转换规则类的 Class 对象,然后再映射器对应的方法上使用 @Mapping 注解的 qualifiedByName 属性,属性值为转换规则类 @Named 定义的方法名

@Mapper(uses = DateToLongConverter.class)
public interface UpgradeStateConverter {
    @Mapping(target = "createTime", source = "createTime", qualifiedByName = "dateToLong")
    @Mapping(target = "updateTime", source = "updateTime", qualifiedByName = "dateToLong")
    UpgradeDeviceStateDTO  toUpgradeDeviceStateDTO( UpgradeStatePO upgradeStateInfo);
    黑暗也有阳光
        软件工程师
      
粉丝