带有 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 获取数据

带有反应 SDK 的 PayPal 结帐(v2)

Webpack 生产构建失败:“无法解析 'aws-sdk'”

构建aws-sdk-go的依赖关系在Go版本1.13上失败