Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Diferencias en la deserialización entre 1.x y 2.x de AWS SDK para Java
Enumere los objetos para solicitar la diferencia de parámetros
Los SDK para Java v1.x y v2.x difieren en la forma en que serializan los objetos de lista para solicitar parámetros.
El SDK para Java 1.x no serializa una lista vacía, mientras que el SDK para Java 2.x serializa una lista vacía como un parámetro vacío.
Por ejemplo, pensemos en un servicio con un SampleOperation que toma un SampleRequest. SampleRequest acepta dos parámetros: un tipo de cadena str1 y un tipo de lista listParam, como se muestra en los siguientes ejemplos.
ejemplo de SampleOperation en 1.x
SampleRequest v1Request = new SampleRequest() .withStr1("TestName"); sampleServiceV1Client.sampleOperation(v1Request);
El registro a nivel de cable muestra que el parámetro listParam no está serializado.
Action=SampleOperation&Version=2011-01-01&str1=TestName
ejemplo de SampleOperation en 2.x
sampleServiceV2Client.sampleOperation(b -> b .str1("TestName"));
El registro a nivel de cable muestra que el parámetro listParam está serializado con ningún valor.
Action=SampleOperation&Version=2011-01-01&str1=TestName&listParam=
POJO en la V1 en comparación con compiladores en la V2
Dado que SDK V1 para Java usa clases POJO mutables, las bibliotecas de serialización y deserialización, como Jackson
El SDK V2 para Java, por el contrario, utiliza objetos de modelo inmutables. Debe usar un compilador intermedio para realizar desserialización.
El siguiente ejemplo muestra las diferencias entre de/serializar una llamada a la API de headBucket con la V1 y la V2 utilizando un ObjectMapper Jackson.
public void sendRequest() throws IOException { final String bucketName = "amzn-s3-demo-bucket"; final ObjectMapper mapper = new ObjectMapper(); // V1 uses POJOs to serialize and deserialize. final AmazonS3 v1S3Client = AmazonS3ClientBuilder.defaultClient(); HeadBucketResult resultV1 = v1S3Client.headBucket( new HeadBucketRequest(bucketName)); String v1Serialized = mapper.writeValueAsString(resultV1); HeadBucketResult deserializedV1 = mapper.readValue(v1Serialized, HeadBucketResult.class); // V2 uses builders to serialize and deserialize. S3Client v2S3Client = S3Client.create(); HeadBucketResponse v2Response = v2S3Client.headBucket( b -> b.bucket(bucketName)); String v2Serialized = mapper.writeValueAsString( v2Response.toBuilder()); HeadBucketResponse v2Deserialized = mapper.readValue( v2Serialized, HeadBucketResponse.serializableBuilderClass()) .build(); }