

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# の 1.x と 2.x のシリアル化の違い AWS SDK for Java
<a name="migration-serialization-changes"></a>

## パラメータをリクエストするための List オブジェクトの違い
<a name="serialization-diffs-list-obj-to-req-param"></a>

SDK for Java v1.x と v2.x では、List オブジェクトをリクエストパラメータに対してシリアル化する方法が異なります。

SDK for Java 1.x は空のリストをシリアル化しませんが、 SDK for Java 2.x は空のリストを空のパラメータとしてシリアル化します。

たとえば、`SampleRequest` を取得する `SampleOperation` を使用するサービスを考えてみましょう。`SampleRequest` は、次の例に示すように、String 型 `str1` と List 型 `listParam` の 2 つのパラメータを受け入れます。

**Example 1.x の `SampleOperation` の例**  

```
SampleRequest v1Request = new SampleRequest()
    .withStr1("TestName");

sampleServiceV1Client.sampleOperation(v1Request);
```
ワイヤレベルのロギングでは、`listParam` パラメータがシリアル化されていないことが示されています。  

```
Action=SampleOperation&Version=2011-01-01&str1=TestName
```

**Example 2.x の `SampleOperation` の例**  

```
sampleServiceV2Client.sampleOperation(b -> b
    .str1("TestName"));
```
ワイヤレベルのロギングでは、値がないまま `listParam` パラメータがシリアル化されたことが示されています。  

```
Action=SampleOperation&Version=2011-01-01&str1=TestName&listParam=
```

## V1 の POJO と V2 のビルダーの比較
<a name="serialization-json-objects"></a>

V1 SDK for Java は変更可能な POJO クラスを使用するため、[Jackson](https://github.com/FasterXML/jackson-docs) などのシリアル化ライブラリと逆シリアル化ライブラリはモデルオブジェクトを直接使用できます。

対照的に、V2 SDK for Java は変更不可能なモデルオブジェクトを使用します。逆シリアル化/シリアル化を実行するには、中間ビルダーを使用する必要があります。

次の例は、Jackson `ObjectMapper` を使用して V1 と V2 で `headBucket` API コールを逆シリアル化/シリアル化する場合の違いを示しています。

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