Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Menggunakan hasil paginasi di 2.x AWS SDK untuk Java
Banyak AWS operasi mengembalikan hasil paginasi ketika objek respons terlalu besar untuk dikembalikan dalam satu respons. Di AWS SDK untuk Java 1.0, respons berisi token yang Anda gunakan untuk mengambil halaman hasil berikutnya. Sebaliknya, AWS SDK untuk Java 2.x memiliki metode autopagination yang membuat beberapa panggilan layanan untuk mendapatkan halaman hasil berikutnya untuk Anda secara otomatis. Anda hanya perlu menulis kode yang memproses hasilnya. Autopagination tersedia untuk klien sinkron dan asinkron.
catatan
Cuplikan kode ini mengasumsikan bahwa Anda memahami dasar-dasar penggunaan SDK, dan telah mengonfigurasi lingkungan Anda dengan akses masuk tunggal.
pagination sinkron
Contoh berikut menunjukkan metode pagination sinkron untuk mencantumkan objek Amazon S3 dalam bucket.
Iterasi di atas halaman
Contoh pertama menunjukkan penggunaan objek listRes paginator, sebuah ListObjectsV2Iterablestream Kode mengalir di atas halaman respons, mengubah aliran respons menjadi aliran S3Object konten, dan kemudian memproses konten objek. Amazon S3 
Impor berikut berlaku untuk semua contoh di bagian pagination sinkron ini.
import java.io.IOException; import java.nio.ByteBuffer; import java.util.Random; import software.amazon.awssdk.core.waiters.WaiterResponse; import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.s3.S3Client; import software.amazon.awssdk.services.s3.paginators.ListObjectsV2Iterable; import software.amazon.awssdk.core.sync.RequestBody; import software.amazon.awssdk.services.s3.model.S3Exception; import software.amazon.awssdk.services.s3.model.PutObjectRequest; import software.amazon.awssdk.services.s3.model.ListObjectsV2Request; import software.amazon.awssdk.services.s3.model.ListObjectsV2Response; import software.amazon.awssdk.services.s3.model.S3Object; import software.amazon.awssdk.services.s3.model.GetObjectRequest; import software.amazon.awssdk.services.s3.model.DeleteObjectRequest; import software.amazon.awssdk.services.s3.model.DeleteBucketRequest; import software.amazon.awssdk.services.s3.model.CreateMultipartUploadRequest; import software.amazon.awssdk.services.s3.model.CreateMultipartUploadResponse; import software.amazon.awssdk.services.s3.model.CompletedMultipartUpload; import software.amazon.awssdk.services.s3.model.CreateBucketRequest; import software.amazon.awssdk.services.s3.model.CompletedPart; import software.amazon.awssdk.services.s3.model.CreateBucketConfiguration; import software.amazon.awssdk.services.s3.model.UploadPartRequest; import software.amazon.awssdk.services.s3.model.CompleteMultipartUploadRequest; import software.amazon.awssdk.services.s3.waiters.S3Waiter; import software.amazon.awssdk.services.s3.model.HeadBucketRequest; import software.amazon.awssdk.services.s3.model.HeadBucketResponse;
ListObjectsV2Request listReq = ListObjectsV2Request.builder() .bucket(bucketName) .maxKeys(1) .build(); ListObjectsV2Iterable listRes = s3.listObjectsV2Paginator(listReq); // Process response pages listRes.stream() .flatMap(r -> r.contents().stream()) .forEach(content -> System.out .println(" Key: " + content.key() + " size = " + content.size()));
Lihat contoh lengkapnya
Iterasi di atas objek
Contoh berikut menunjukkan cara untuk mengulangi objek yang dikembalikan dalam respons alih-alih halaman respons. contentsMetode ListObjectsV2Iterable kelas mengembalikan sebuah SdkIterable
Gunakan aliran
Cuplikan berikut menggunakan stream metode pada konten respons untuk mengulangi koleksi item paginasi.
// Helper method to work with paginated collection of items directly. listRes.contents().stream() .forEach(content -> System.out .println(" Key: " + content.key() + " size = " + content.size()));
Lihat contoh lengkapnya
Gunakan untuk setiap loop
Karena SdkIterable memperluas Iterable antarmuka, Anda dapat memproses konten seperti apa punIterable. Cuplikan berikut menggunakan for-each loop standar untuk iterasi melalui isi respon.
for (S3Object content : listRes.contents()) { System.out.println(" Key: " + content.key() + " size = " + content.size()); }
Lihat contoh lengkapnya
Pagination manual
Jika kasus penggunaan Anda memerlukannya, pagination manual masih tersedia. Gunakan token berikutnya di objek respons untuk permintaan berikutnya. Contoh berikut menggunakan while loop.
ListObjectsV2Request listObjectsReqManual = ListObjectsV2Request.builder() .bucket(bucketName) .maxKeys(1) .build(); boolean done = false; while (!done) { ListObjectsV2Response listObjResponse = s3.listObjectsV2(listObjectsReqManual); for (S3Object content : listObjResponse.contents()) { System.out.println(content.key()); } if (listObjResponse.nextContinuationToken() == null) { done = true; } listObjectsReqManual = listObjectsReqManual.toBuilder() .continuationToken(listObjResponse.nextContinuationToken()) .build(); }
Lihat contoh lengkapnya
pagination asinkron
Contoh berikut menunjukkan metode pagination asinkron untuk daftar tabel. DynamoDB
Ulangi halaman nama tabel
Dua contoh berikut menggunakan klien DynamoDB asinkron yang memanggil metode dengan permintaan listTablesPaginator untuk mendapatkan file. ListTablesPublisherListTablesPublishermengimplementasikan dua antarmuka, yang menyediakan banyak opsi untuk memproses respons. Kita akan melihat metode masing-masing antarmuka.
Gunakan Subscriber
            Contoh kode berikut menunjukkan bagaimana memproses hasil paginasi dengan menggunakan org.reactivestreams.Publisher antarmuka yang diimplementasikan oleh. ListTablesPublisher Untuk mempelajari lebih lanjut tentang model aliran reaktif, lihat repo Reactive
Impor berikut berlaku untuk semua contoh di bagian pagination asinkron ini.
import io.reactivex.rxjava3.core.Flowable; import org.reactivestreams.Subscriber; import org.reactivestreams.Subscription; import reactor.core.publisher.Flux; import software.amazon.awssdk.core.async.SdkPublisher; import software.amazon.awssdk.services.dynamodb.DynamoDbAsyncClient; import software.amazon.awssdk.services.dynamodb.model.ListTablesRequest; import software.amazon.awssdk.services.dynamodb.model.ListTablesResponse; import software.amazon.awssdk.services.dynamodb.paginators.ListTablesPublisher; import java.util.List; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException;
Kode berikut memperoleh sebuah ListTablesPublisher instance.
// Creates a default client with credentials and region loaded from the // environment. final DynamoDbAsyncClient asyncClient = DynamoDbAsyncClient.create(); ListTablesRequest listTablesRequest = ListTablesRequest.builder().limit(3).build(); ListTablesPublisher publisher = asyncClient.listTablesPaginator(listTablesRequest);
Kode berikut menggunakan implementasi anonim org.reactivestreams.Subscriber untuk memproses hasil untuk setiap halaman.
onSubscribeMetode ini memanggil Subscription.request metode untuk memulai permintaan data dari penerbit. Metode ini harus dipanggil untuk mulai mendapatkan data dari penerbit. 
onNextMetode pelanggan memproses halaman respons dengan mengakses semua nama tabel dan mencetak masing-masing. Setelah halaman diproses, halaman lain diminta dari penerbit. Metode ini dipanggil berulang kali sampai semua halaman diambil.
onErrorMetode ini dipicu jika terjadi kesalahan saat mengambil data. Akhirnya, onComplete metode ini dipanggil ketika semua halaman telah diminta.
// A Subscription represents a one-to-one life-cycle of a Subscriber subscribing // to a Publisher. publisher.subscribe(new Subscriber<ListTablesResponse>() { // Maintain a reference to the subscription object, which is required to request // data from the publisher. private Subscription subscription; @Override public void onSubscribe(Subscription s) { subscription = s; // Request method should be called to demand data. Here we request a single // page. subscription.request(1); } @Override public void onNext(ListTablesResponse response) { response.tableNames().forEach(System.out::println); // After you process the current page, call the request method to signal that // you are ready for next page. subscription.request(1); } @Override public void onError(Throwable t) { // Called when an error has occurred while processing the requests. } @Override public void onComplete() { // This indicates all the results are delivered and there are no more pages // left. } });
Lihat contoh lengkapnya
Gunakan Consumer
            SdkPublisherAntarmuka yang ListTablesPublisher mengimplementasikan memiliki subscribe metode yang mengambil Consumer dan mengembalikan aCompletableFuture<Void>. 
subscribeMetode dari antarmuka ini dapat digunakan untuk kasus penggunaan sederhana ketika overhead org.reactivestreams.Subscriber mungkin terlalu banyak. Karena kode di bawah ini menghabiskan setiap halaman, ia memanggil tableNames metode pada masing-masing halaman. tableNamesMetode mengembalikan nama tabel DynamoDB yang diproses dengan metode. java.util.List forEach
// Use a Consumer for simple use cases. CompletableFuture<Void> future = publisher.subscribe( response -> response.tableNames() .forEach(System.out::println));
Lihat contoh lengkapnya
Ulangi nama tabel
Contoh berikut menunjukkan cara untuk mengulangi objek yang dikembalikan dalam respons alih-alih halaman respons. Mirip dengan contoh Amazon S3 sinkron yang sebelumnya ditampilkan dengan contents metodenya, kelas hasil asinkron DynamoDBListTablesPublisher, memiliki tableNames metode kenyamanan untuk berinteraksi dengan koleksi item yang mendasarinya. Jenis pengembalian tableNames metode adalah SdkPublisher
Gunakan Subscriber
            Kode berikut memperoleh koleksi SdkPublisher yang mendasari nama tabel.
// Create a default client with credentials and region loaded from the // environment. final DynamoDbAsyncClient asyncClient = DynamoDbAsyncClient.create(); ListTablesRequest listTablesRequest = ListTablesRequest.builder().limit(3).build(); ListTablesPublisher listTablesPublisher = asyncClient.listTablesPaginator(listTablesRequest); SdkPublisher<String> publisher = listTablesPublisher.tableNames();
Kode berikut menggunakan implementasi anonim org.reactivestreams.Subscriber untuk memproses hasil untuk setiap halaman.
onNextMetode pelanggan memproses elemen individual dari koleksi. Dalam hal ini, itu adalah nama tabel. Setelah nama tabel diproses, nama tabel lain diminta dari penerbit. Metode ini dipanggil berulang kali sampai semua nama tabel diambil.
// Use a Subscriber. publisher.subscribe(new Subscriber<String>() { private Subscription subscription; @Override public void onSubscribe(Subscription s) { subscription = s; subscription.request(1); } @Override public void onNext(String tableName) { System.out.println(tableName); subscription.request(1); } @Override public void onError(Throwable t) { } @Override public void onComplete() { } });
Lihat contoh lengkapnya
Gunakan Consumer
            Contoh berikut menggunakan subscribe metode SdkPublisher yang membutuhkan a Consumer untuk memproses setiap item.
// Use a Consumer. CompletableFuture<Void> future = publisher.subscribe(System.out::println); future.get();
Lihat contoh lengkapnya
Gunakan pustaka pihak ketiga
Anda dapat menggunakan pustaka pihak ketiga lainnya alih-alih menerapkan pelanggan khusus. Contoh ini menunjukkan penggunaan RxJava, tetapi pustaka apa pun yang mengimplementasikan antarmuka aliran reaktif dapat digunakan. Lihat halaman RxJava  wiki  GitHub
Untuk menggunakan perpustakaan, tambahkan sebagai dependensi. Jika menggunakan Maven, contoh menunjukkan cuplikan POM untuk digunakan.
Entri POM
<dependency> <groupId>io.reactivex.rxjava3</groupId> <artifactId>rxjava</artifactId> <version>3.1.6</version> </dependency>
Kode
DynamoDbAsyncClient asyncClient = DynamoDbAsyncClient.create(); ListTablesPublisher publisher = asyncClient.listTablesPaginator(ListTablesRequest.builder() .build()); // The Flowable class has many helper methods that work with // an implementation of an org.reactivestreams.Publisher. List<String> tables = Flowable.fromPublisher(publisher) .flatMapIterable(ListTablesResponse::tableNames) .toList() .blockingGet(); System.out.println(tables);
Lihat contoh lengkapnya