es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

MapStruct con AWS SDK V2 Builder

Para el mapeo interno, creé el POJO / DTO para los Modelos V2 de AWS SDK.

Para mapear las variables, estoy utilizando MapStruct con la anotación Mapper, pero la Implementación generada durante el procesamiento de la anotación no está utilizando ningún getter. Sin embargo, el setter con el constructor se agrega correctamente pero con valor nulo.

@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;
    }
}

Los Modelos de AWS SDK V2 no tienen getters con el prefijo “get”. En su lugar, utilizan directamente el nombre de la variable. ¿Cómo se configura MapStruct para este escenario?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para configurar MapStruct para escenarios en los que los modelos de AWS SDK V2 no tienen métodos getter con el prefijo “get”, puedes utilizar la anotación @Mapping para especificar la propiedad fuente del modelo y la propiedad destino en el DTO. Por ejemplo, si tu modelo tiene una propiedad llamada “deviceName” y tu DTO tiene una propiedad llamada “deviceNameModel”, puedes escribir:

    @Mapper
    public interface Ec2Mapper {
        @Mapping(source = "deviceName", target = "deviceNameModel")
        LaunchTemplateBlockDeviceMappingModel mapLaunchTemplateBlockDeviceMappingModel(
              LaunchTemplateBlockDeviceMapping launchTemplateBlockDeviceMapping);
    }
    

    Esto le indicará a MapStruct que mapee la propiedad “deviceName” del modelo a la propiedad “deviceNameModel” en el DTO. Puedes utilizar este mismo enfoque para todas las propiedades del modelo que no tengan un getter con el prefijo “get”.

Comments are closed.