

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 de serialización entre 1.x y 2.x del AWS SDK para Java
<a name="migration-serialization-changes"></a>

## Enumere los objetos para solicitar la diferencia de parámetros
<a name="serialization-diffs-list-obj-to-req-param"></a>

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.

**Example 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
```

**Example 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=
```

## POJOs en la V1 en comparación con los constructores de la V2
<a name="serialization-json-objects"></a>

Dado que SDK V1 para Java usa clases POJO mutables, las bibliotecas de serialización y deserialización, como [Jackson](https://github.com/FasterXML/jackson-docs), pueden usar objetos de modelo directamente. 

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/serializing una llamada a la `headBucket` API con la V1 y la V2 con un Jackson`ObjectMapper`.

```
    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();
    }
```