Changes in parsing Amazon S3 URIs from version 1 to version 2 - AWS SDK for Java 2.x

Changes in parsing Amazon S3 URIs from version 1 to version 2

This topic details the changes in parsing Amazon S3 URIs from version 1 (v1) to version 2 (v2.).

High-level changes

To begin parsing an S3 URI in v1, you instantiate an AmazonS3URI by using a constructor. In v2 you call parseUri() on an instance of S3Utilities, to return an S3URI.

Change v1 v2

Maven dependencies

<dependencyManagement> <dependencies> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk-bom</artifactId> <version>1.12.5871</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>com.amazonaws</groupId> <artifactId>s3</artifactId> </dependency> </dependencies>
<dependencyManagement> <dependencies> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>bom</artifactId> <version>2.27.212</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>s3</artifactId> </dependency> </dependencies>
Package name com.amazonaws.services.s3 software.amazon.awssdk.services.s3
Class names AmazonS3URI S3URI

1 Latest version. 2 Latest version.

API changes

Behavior v1 v2
Parse an S3 URI.
URI uri = URI.create( "https://s3.amazonaws.com"); AmazonS3Uri s3Uri = new AmazonS3URI(uri, false);
S3Client s3Client = S3Client.create(); S3Utilities s3Utilities = s3Client.utilities(); S3Uri s3Uri = s3Utilities.parseUri(uri);
Retrieve the bucket name from an S3 URI.
String bucket = s3Uri.getBucket();
Optional<String> bucket = s3Uri.bucket();
Retrieve the key.
String key = s3Uri.getKey();
Optional<String> key = s3Uri.key();
Retrieve the region.
String region = s3Uri.getRegion();
Optional<Region> region = s3Uri.region(); String region; if (s3Uri.region().isPresent()) { region = s3Uri.region().get().id(); }

Retrieve whether the S3 URI is path style.

boolean isPathStyle = s3Uri.isPathStyle();
boolean isPathStyle = s3Uri.isPathStyle();
Retrieve the version ID.
String versionId = s3Uri.getVersionId();
Optional<String> versionId = s3Uri.firstMatchingRawQueryParameter("versionId");
Retrieve the query parameters. N/A
Map<String, List<String>> queryParams = s3Uri.rawQueryParameters();

Behavior changes

URL encoding

v1 provides the option to pass in a flag to specify whether the URI should be URL encoded. The default value is true.

In v2, URL encoding is not supported. If you work with object keys or query parameters that have reserved or unsafe characters, you must URL encode them. For example you need to replace a whitespace " " with %20.