我的源类和目标类看起来像这样
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 转换为字符串,但我想避免为每个类编写映射器文件,有没有更好的方法来做到这一点?
您不需要为所有这些类创建映射器(甚至:映射方法)。
拥有以下映射器定义就足够了(如果您有字段的 getter 和 setter):
@Mapper
interface UserHistoryMapper {
UserHistoryTarget map(UserHistorySource source);
default String map(OffsetDateTime odt) {
// sample implementation
return odt.toString();
}
}
MapStruct 注释处理器将生成所需的映射方法并在需要时调用
String map(OffsetDateTime odt)
。