翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
AWS SDK for Java の 1.x と 2.x でのシリアル化の違い
パラメータをリクエストするための List オブジェクトの違い
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 つのパラメータを受け入れます。
例 1.x の SampleOperation の例
SampleRequest v1Request = new SampleRequest() .withStr1("TestName"); sampleServiceV1Client.sampleOperation(v1Request);
ワイヤレベルのロギングでは、listParam パラメータがシリアル化されていないことが示されています。
Action=SampleOperation&Version=2011-01-01&str1=TestName
例 2.x の SampleOperation の例
sampleServiceV2Client.sampleOperation(b -> b .str1("TestName"));
ワイヤレベルのロギングでは、値がないまま listParam パラメータがシリアル化されたことが示されています。
Action=SampleOperation&Version=2011-01-01&str1=TestName&listParam=
V1 の POJO と V2 のビルダーの比較
V1 SDK for Java は変更可能な POJO クラスを使用するため、Jackson
対照的に、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(); }