带有 AWS SDK V2 构建器的 MapStruct
Posted
技术标签:
【中文标题】带有 AWS SDK V2 构建器的 MapStruct【英文标题】:MapStruct with AWS SDk V2 Builder 【发布时间】:2022-01-13 10:14:11 【问题描述】:对于内部映射,我为 AWS SDK Models V2 创建了 POJO / DTO
为了映射变量,我使用 MapStruct 使用 Mapper 注释,但在注释处理期间生成的实现没有使用任何 getter,但带有构建器的 setter 已正确添加但为 null
@Mapper
public interface Ec2Mapper
LaunchTemplateBlockDeviceMappingModel mapLaunchTemplateBlockDeviceMappingModel(
LaunchTemplateBlockDeviceMapping launchTemplateBlockDeviceMapping);
@Generated(
value = "org.mapstruct.ap.MappingProcessor",
date = "2021-12-08T15:58:00+0530",
comments = "version: 1.4.2.Final, compiler: IncrementalProcessingEnvironment from gradle-language-java-6.4.1.jar, environment: Java 1.8.0_292 (AdoptOpenJDK)"
)
public class Ec2MapperImpl implements Ec2Mapper
@Override
public LaunchTemplateBlockDeviceMappingModel mapLaunchTemplateBlockDeviceMappingModel(LaunchTemplateBlockDeviceMapping launchTemplateBlockDeviceMapping)
if ( launchTemplateBlockDeviceMapping == null )
return null;
String deviceName = null;
String virtualName = null;
LaunchTemplateEbsBlockDeviceModel ebs = null;
String noDevice = null;
LaunchTemplateBlockDeviceMappingModel launchTemplateBlockDeviceMappingModel = new LaunchTemplateBlockDeviceMappingModel( deviceName, virtualName, ebs, noDevice );
return launchTemplateBlockDeviceMappingModel;
AWS SDK V2 模型没有 getter 前缀 get,它直接是变量的名称,如何为这个场景配置 map 结构。
【问题讨论】:
【参考方案1】:MapStruct 通过其AccessorNamingStrategy
提供了一种方法来定义某个方法是getter 还是setter。
理论上,您可以编写一个自定义 AccessorNamingStrategy
,它能够检测 AWS SDK Java 2 中的方法作为 getter。请记住,简单地将每个方法返回一个返回类型并且没有参数作为 getter 可能会导致误报。
理想情况下,方法应该由 AWS SDK 注释,然后您可以使用它来检测方法是否是 getter。 SDK 目前不这样做。您可以要求这样做,但我不确定 AWS 团队是否愿意这样做。
【讨论】:
以上是关于带有 AWS SDK V2 构建器的 MapStruct的主要内容,如果未能解决你的问题,请参考以下文章
CredentialsError:无法从适用于 Javascript 的 AWS-SDK v2 中的 ChainableTemporaryCredentials 加载凭证
Amazon S3 设置元数据使用 AWS SDK PHP v2 upload() 失败
使用 aws-sdk-v1 从 ruby 脚本中的 AWS SSM Parameter Store 获取数据