【发布时间】:2021-01-26 14:16:27
【问题描述】:
背景
我们目前正在使用六边形架构实现应用程序。我们的 REST API DTO 通过 MapStruct 映射到我们的实体。这工作正常。 (不过,如果 MapStruct 支持分层结构会更好。)
问题
但是,我们面临的问题可以通过以下示例进行最佳描述:
假设您有一个实体Person 来存储出生日期。现在,这
实体有一个可能称为int calculateAge() 的方法。
REST API 的PersonDto 将获得属性int age。
现在,我们希望 MapStruct 为我们生成这个映射。我们的方法是尝试配置@Mapping(target = "age", ...) 使用int calculateAge() 方法作为源,但我们没有成功。
相信这可能是 MapStruct 的一个简单应用程序,但在搜索该主题数小时后仍未提出一个干净的解决方案,我们感到非常失望。
解决方案
我们发现了两种可行的解决方案,但(在我们看来)不是真正可维护的:
- 使用
@Mapping(expression = "java(...)") - 使用
@AfterMapping对构造的DTO进行后期处理,并在注解的方法中实现所需的映射
问题
是否有更简洁的方法来实现我们的目标,可能类似于 @Mapping(sourceMethod = "calculateAge", target = "age)?
【问题讨论】: