mapstruct,嵌套类避免为每个嵌套类编写映射器

问题描述 投票:0回答:1

我的源类和目标类看起来像这样

class UserHistorySource {
   private DetailsSource details;
}

class DetailsSource {

   private List<BalanceSource> balance;
   private List<RewardsSource> rewards;
   private List<LogsSource> logs;
   ….
   ….
}


class BalanceSource {

private String userId;
private OffsetDateTime datetime;
private String amount;

}


class RewardsSource {

private String userId;
private OffsetDateTime datetime;
private String amount;

}

class LogsSource {

private String userId;
private OffsetDateTime datetime;
private String amount;

}

目标类别:

class UserHistoryTarget {
  private DetailsTarget details;
}

class DetailsTarget {

  private List<BalanceTarget> balance;
  private List<RewardsTarget> rewards;
  private List<LogsTarget> logs;
  ….
  ….
}


class BalanceTarget {

  private String userId;
  private String datetime;
  private String amount;
}


class RewardsTarget {
  private String userId;
  private String datetime;
  private String amount;
}

class LogsTarget {

  private String userId;
  private String datetime;
  private String amount;
}

目标类中的日期时间是字符串类型,而源类中的日期时间是OffsetDateTime。 我可以为详细信息、余额、奖励和日志创建单独的映射器文件,并实现默认方法将 OffsetDateTime 转换为字符串,但我想避免为每个类编写映射器文件,有没有更好的方法来做到这一点?

java mapping mapstruct
1个回答
0
投票

您不需要为所有这些类创建映射器(甚至:映射方法)。

拥有以下映射器定义就足够了(如果您有字段的 getter 和 setter):

@Mapper
interface UserHistoryMapper {
    UserHistoryTarget map(UserHistorySource source);

    default String map(OffsetDateTime odt) {
        // sample implementation
        return odt.toString();
    }
}

MapStruct 注释处理器将生成所需的映射方法并在需要时调用

String map(OffsetDateTime odt)

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.