From 1b57f2bda58f7aef6f1b249d74b47971e0c9b05e Mon Sep 17 00:00:00 2001 From: Sam Brannen Date: Fri, 9 Dec 2022 13:26:01 -0500 Subject: [PATCH] Use URI#create instead of URI constructor where feasible in spring-web --- .../web/client/RestOperations.java | 4 +- .../springframework/http/HttpEntityTests.java | 6 +- .../http/HttpHeadersTests.java | 2 +- .../http/RequestEntityTests.java | 25 ++++---- .../http/ResponseEntityTests.java | 25 ++++---- .../AbstractHttpRequestFactoryTests.java | 12 ++-- ...ufferingClientHttpRequestFactoryTests.java | 4 +- ...mponentsClientHttpRequestFactoryTests.java | 4 +- ...rceptingClientHttpRequestFactoryTests.java | 14 ++-- ...ngSimpleClientHttpRequestFactoryTests.java | 6 +- .../server/ServletServerHttpRequestTests.java | 10 +-- .../reactive/AsyncIntegrationTests.java | 2 +- .../reactive/CookieIntegrationTests.java | 2 +- .../reactive/EchoHandlerIntegrationTests.java | 2 +- .../ErrorHandlerIntegrationTests.java | 6 +- .../MultipartHttpHandlerIntegrationTests.java | 2 +- .../RandomHandlerIntegrationTests.java | 2 +- .../ServerHttpRequestIntegrationTests.java | 2 +- .../ServerHttpsRequestIntegrationTests.java | 2 +- .../WriteOnlyHandlerIntegrationTests.java | 5 +- .../reactive/ZeroCopyIntegrationTests.java | 2 +- .../client/RestTemplateIntegrationTests.java | 10 +-- .../client/RestTemplateObservationTests.java | 4 +- .../web/client/RestTemplateTests.java | 10 +-- ...uestPartServletServerHttpRequestTests.java | 4 +- .../ForwardedHeaderTransformerTests.java | 38 +++++------ .../session/WebSessionIntegrationTests.java | 14 ++-- .../web/util/UriComponentsBuilderTests.java | 33 +++++----- .../web/util/UriComponentsTests.java | 17 +++-- .../web/util/UriTemplateTests.java | 64 +++++++++---------- .../http/client/MockClientHttpRequest.java | 8 +-- 31 files changed, 163 insertions(+), 178 deletions(-) diff --git a/spring-web/src/main/java/org/springframework/web/client/RestOperations.java b/spring-web/src/main/java/org/springframework/web/client/RestOperations.java index b5a60302d9..59ee4c78cc 100644 --- a/spring-web/src/main/java/org/springframework/web/client/RestOperations.java +++ b/spring-web/src/main/java/org/springframework/web/client/RestOperations.java @@ -611,7 +611,7 @@ public interface RestOperations { *
 	 * MyRequest body = ...
 	 * RequestEntity request = RequestEntity
-	 *     .post(new URI("https://example.com/foo"))
+	 *     .post(URI.create("https://example.com/foo"))
 	 *     .accept(MediaType.APPLICATION_JSON)
 	 *     .body(body);
 	 * ResponseEntity<MyResponse> response = template.exchange(request, MyResponse.class);
@@ -631,7 +631,7 @@ public interface RestOperations {
 	 * 
 	 * MyRequest body = ...
 	 * RequestEntity request = RequestEntity
-	 *     .post(new URI("https://example.com/foo"))
+	 *     .post(URI.create("https://example.com/foo"))
 	 *     .accept(MediaType.APPLICATION_JSON)
 	 *     .body(body);
 	 * ParameterizedTypeReference<List<MyResponse>> myBean =
diff --git a/spring-web/src/test/java/org/springframework/http/HttpEntityTests.java b/spring-web/src/test/java/org/springframework/http/HttpEntityTests.java
index 6ebf469d08..40b3a7d799 100644
--- a/spring-web/src/test/java/org/springframework/http/HttpEntityTests.java
+++ b/spring-web/src/test/java/org/springframework/http/HttpEntityTests.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2021 the original author or authors.
+ * Copyright 2002-2022 the original author or authors.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -109,8 +109,8 @@ public class HttpEntityTests {
 		headers.setContentType(MediaType.TEXT_PLAIN);
 		String body = "foo";
 		HttpEntity httpEntity = new HttpEntity<>(body, headers);
-		RequestEntity requestEntity = new RequestEntity<>(body, headers, HttpMethod.GET, new URI("/"));
-		RequestEntity requestEntity2 = new RequestEntity<>(body, headers, HttpMethod.GET, new URI("/"));
+		RequestEntity requestEntity = new RequestEntity<>(body, headers, HttpMethod.GET, URI.create("/"));
+		RequestEntity requestEntity2 = new RequestEntity<>(body, headers, HttpMethod.GET, URI.create("/"));
 
 		assertThat(requestEntity.getBody()).isEqualTo(body);
 		assertThat(requestEntity.getHeaders().getContentType()).isEqualTo(MediaType.TEXT_PLAIN);
diff --git a/spring-web/src/test/java/org/springframework/http/HttpHeadersTests.java b/spring-web/src/test/java/org/springframework/http/HttpHeadersTests.java
index 12a0512a15..68f77065c1 100644
--- a/spring-web/src/test/java/org/springframework/http/HttpHeadersTests.java
+++ b/spring-web/src/test/java/org/springframework/http/HttpHeadersTests.java
@@ -153,7 +153,7 @@ public class HttpHeadersTests {
 
 	@Test
 	void location() throws URISyntaxException {
-		URI location = new URI("https://www.example.com/hotels");
+		URI location = URI.create("https://www.example.com/hotels");
 		headers.setLocation(location);
 		assertThat(headers.getLocation()).as("Invalid Location header").isEqualTo(location);
 		assertThat(headers.getFirst("Location")).as("Invalid Location header").isEqualTo("https://www.example.com/hotels");
diff --git a/spring-web/src/test/java/org/springframework/http/RequestEntityTests.java b/spring-web/src/test/java/org/springframework/http/RequestEntityTests.java
index 1c979728f9..45799b74c0 100644
--- a/spring-web/src/test/java/org/springframework/http/RequestEntityTests.java
+++ b/spring-web/src/test/java/org/springframework/http/RequestEntityTests.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2021 the original author or authors.
+ * Copyright 2002-2022 the original author or authors.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -17,7 +17,6 @@
 package org.springframework.http;
 
 import java.net.URI;
-import java.net.URISyntaxException;
 import java.nio.charset.StandardCharsets;
 import java.util.Arrays;
 import java.util.Collections;
@@ -41,10 +40,10 @@ import static org.assertj.core.api.Assertions.assertThat;
 class RequestEntityTests {
 
 	@Test
-	void normal() throws URISyntaxException {
+	void normal() {
 		String headerName = "My-Custom-Header";
 		String headerValue = "HeaderValue";
-		URI url = new URI("https://example.com");
+		URI url = URI.create("https://example.com");
 		Integer entity = 42;
 
 		RequestEntity requestEntity =
@@ -59,14 +58,14 @@ class RequestEntityTests {
 	}
 
 	@Test
-	void uriVariablesExpansion() throws URISyntaxException {
+	void uriVariablesExpansion() {
 		URI uri = UriComponentsBuilder.fromUriString("https://example.com/{foo}").buildAndExpand("bar").toUri();
 		RequestEntity.get(uri).accept(MediaType.TEXT_PLAIN).build();
 
 		String url = "https://www.{host}.com/{path}";
 		String host = "example";
 		String path = "foo/bar";
-		URI expected = new URI("https://www.example.com/foo/bar");
+		URI expected = URI.create("https://www.example.com/foo/bar");
 
 		uri = UriComponentsBuilder.fromUriString(url).buildAndExpand(host, path).toUri();
 		RequestEntity entity = RequestEntity.get(uri).build();
@@ -107,14 +106,14 @@ class RequestEntityTests {
 	}
 
 	@Test
-	void headers() throws URISyntaxException {
+	void headers() {
 		MediaType accept = MediaType.TEXT_PLAIN;
 		long ifModifiedSince = 12345L;
 		String ifNoneMatch = "\"foo\"";
 		long contentLength = 67890;
 		MediaType contentType = MediaType.TEXT_PLAIN;
 
-		RequestEntity responseEntity = RequestEntity.post(new URI("https://example.com")).
+		RequestEntity responseEntity = RequestEntity.post(URI.create("https://example.com")).
 				accept(accept).
 				acceptCharset(StandardCharsets.UTF_8).
 				ifModifiedSince(ifModifiedSince).
@@ -126,7 +125,7 @@ class RequestEntityTests {
 
 		assertThat(responseEntity).isNotNull();
 		assertThat(responseEntity.getMethod()).isEqualTo(HttpMethod.POST);
-		assertThat(responseEntity.getUrl()).isEqualTo(new URI("https://example.com"));
+		assertThat(responseEntity.getUrl()).isEqualTo(URI.create("https://example.com"));
 		HttpHeaders responseHeaders = responseEntity.getHeaders();
 
 		assertThat(responseHeaders.getFirst(HttpHeaders.ACCEPT)).isEqualTo(MediaType.TEXT_PLAIN_VALUE);
@@ -140,8 +139,8 @@ class RequestEntityTests {
 	}
 
 	@Test
-	void methods() throws URISyntaxException {
-		URI url = new URI("https://example.com");
+	void methods() {
+		URI url = URI.create("https://example.com");
 
 		RequestEntity entity = RequestEntity.get(url).build();
 		assertThat(entity.getMethod()).isEqualTo(HttpMethod.GET);
@@ -167,8 +166,8 @@ class RequestEntityTests {
 	}
 
 	@Test  // SPR-13154
-	void types() throws URISyntaxException {
-		URI url = new URI("https://example.com");
+	void types() {
+		URI url = URI.create("https://example.com");
 		List body = Arrays.asList("foo", "bar");
 		ParameterizedTypeReference typeReference = new ParameterizedTypeReference>() {};
 
diff --git a/spring-web/src/test/java/org/springframework/http/ResponseEntityTests.java b/spring-web/src/test/java/org/springframework/http/ResponseEntityTests.java
index bbd7721871..dacfad7b8f 100644
--- a/spring-web/src/test/java/org/springframework/http/ResponseEntityTests.java
+++ b/spring-web/src/test/java/org/springframework/http/ResponseEntityTests.java
@@ -17,7 +17,6 @@
 package org.springframework.http;
 
 import java.net.URI;
-import java.net.URISyntaxException;
 import java.util.List;
 import java.util.Optional;
 import java.util.concurrent.TimeUnit;
@@ -92,8 +91,8 @@ class ResponseEntityTests {
 	}
 
 	@Test
-	void createdLocation() throws URISyntaxException {
-		URI location = new URI("location");
+	void createdLocation() {
+		URI location = URI.create("location");
 		ResponseEntity responseEntity = ResponseEntity.created(location).build();
 
 		assertThat(responseEntity).isNotNull();
@@ -106,7 +105,7 @@ class ResponseEntityTests {
 	}
 
 	@Test
-	void acceptedNoBody() throws URISyntaxException {
+	void acceptedNoBody() {
 		ResponseEntity responseEntity = ResponseEntity.accepted().build();
 
 		assertThat(responseEntity).isNotNull();
@@ -115,7 +114,7 @@ class ResponseEntityTests {
 	}
 
 	@Test // SPR-14939
-	void acceptedNoBodyWithAlternativeBodyType() throws URISyntaxException {
+	void acceptedNoBodyWithAlternativeBodyType() {
 		ResponseEntity responseEntity = ResponseEntity.accepted().build();
 
 		assertThat(responseEntity).isNotNull();
@@ -124,7 +123,7 @@ class ResponseEntityTests {
 	}
 
 	@Test
-	void noContent() throws URISyntaxException {
+	void noContent() {
 		ResponseEntity responseEntity = ResponseEntity.noContent().build();
 
 		assertThat(responseEntity).isNotNull();
@@ -133,7 +132,7 @@ class ResponseEntityTests {
 	}
 
 	@Test
-	void badRequest() throws URISyntaxException {
+	void badRequest() {
 		ResponseEntity responseEntity = ResponseEntity.badRequest().build();
 
 		assertThat(responseEntity).isNotNull();
@@ -142,7 +141,7 @@ class ResponseEntityTests {
 	}
 
 	@Test
-	void notFound() throws URISyntaxException {
+	void notFound() {
 		ResponseEntity responseEntity = ResponseEntity.notFound().build();
 
 		assertThat(responseEntity).isNotNull();
@@ -151,7 +150,7 @@ class ResponseEntityTests {
 	}
 
 	@Test
-	void unprocessableEntity() throws URISyntaxException {
+	void unprocessableEntity() {
 		ResponseEntity responseEntity = ResponseEntity.unprocessableEntity().body("error");
 
 		assertThat(responseEntity).isNotNull();
@@ -160,7 +159,7 @@ class ResponseEntityTests {
 	}
 
 	@Test
-	void internalServerError() throws URISyntaxException {
+	void internalServerError() {
 		ResponseEntity responseEntity = ResponseEntity.internalServerError().body("error");
 
 		assertThat(responseEntity).isNotNull();
@@ -169,8 +168,8 @@ class ResponseEntityTests {
 	}
 
 	@Test
-	void headers() throws URISyntaxException {
-		URI location = new URI("location");
+	void headers() {
+		URI location = URI.create("location");
 		long contentLength = 67890;
 		MediaType contentType = MediaType.TEXT_PLAIN;
 
@@ -197,7 +196,7 @@ class ResponseEntityTests {
 	}
 
 	@Test
-	void Etagheader() throws URISyntaxException {
+	void Etagheader() {
 
 		ResponseEntity responseEntity = ResponseEntity.ok().eTag("\"foo\"").build();
 		assertThat(responseEntity.getHeaders().getETag()).isEqualTo("\"foo\"");
diff --git a/spring-web/src/test/java/org/springframework/http/client/AbstractHttpRequestFactoryTests.java b/spring-web/src/test/java/org/springframework/http/client/AbstractHttpRequestFactoryTests.java
index 87fc8ebba0..d3024af1a4 100644
--- a/spring-web/src/test/java/org/springframework/http/client/AbstractHttpRequestFactoryTests.java
+++ b/spring-web/src/test/java/org/springframework/http/client/AbstractHttpRequestFactoryTests.java
@@ -66,7 +66,7 @@ abstract class AbstractHttpRequestFactoryTests extends AbstractMockWebServerTest
 
 	@Test
 	void status() throws Exception {
-		URI uri = new URI(baseUrl + "/status/notfound");
+		URI uri = URI.create(baseUrl + "/status/notfound");
 		ClientHttpRequest request = factory.createRequest(uri, HttpMethod.GET);
 		assertThat(request.getMethod()).as("Invalid HTTP method").isEqualTo(HttpMethod.GET);
 		assertThat(request.getURI()).as("Invalid HTTP URI").isEqualTo(uri);
@@ -78,7 +78,7 @@ abstract class AbstractHttpRequestFactoryTests extends AbstractMockWebServerTest
 
 	@Test
 	void echo() throws Exception {
-		ClientHttpRequest request = factory.createRequest(new URI(baseUrl + "/echo"), HttpMethod.PUT);
+		ClientHttpRequest request = factory.createRequest(URI.create(baseUrl + "/echo"), HttpMethod.PUT);
 		assertThat(request.getMethod()).as("Invalid HTTP method").isEqualTo(HttpMethod.PUT);
 
 		String headerName = "MyHeader";
@@ -107,7 +107,7 @@ abstract class AbstractHttpRequestFactoryTests extends AbstractMockWebServerTest
 
 	@Test
 	void multipleWrites() throws Exception {
-		ClientHttpRequest request = factory.createRequest(new URI(baseUrl + "/echo"), HttpMethod.POST);
+		ClientHttpRequest request = factory.createRequest(URI.create(baseUrl + "/echo"), HttpMethod.POST);
 
 		final byte[] body = "Hello World".getBytes(StandardCharsets.UTF_8);
 		if (request instanceof StreamingHttpOutputMessage streamingRequest) {
@@ -128,7 +128,7 @@ abstract class AbstractHttpRequestFactoryTests extends AbstractMockWebServerTest
 
 	@Test
 	void headersAfterExecute() throws Exception {
-		ClientHttpRequest request = factory.createRequest(new URI(baseUrl + "/status/ok"), HttpMethod.POST);
+		ClientHttpRequest request = factory.createRequest(URI.create(baseUrl + "/status/ok"), HttpMethod.POST);
 
 		request.getHeaders().add("MyHeader", "value");
 		byte[] body = "Hello World".getBytes(StandardCharsets.UTF_8);
@@ -152,7 +152,7 @@ abstract class AbstractHttpRequestFactoryTests extends AbstractMockWebServerTest
 	}
 
 	protected void assertHttpMethod(String path, HttpMethod method) throws Exception {
-		ClientHttpRequest request = factory.createRequest(new URI(baseUrl + "/methods/" + path), method);
+		ClientHttpRequest request = factory.createRequest(URI.create(baseUrl + "/methods/" + path), method);
 		if (method == HttpMethod.POST || method == HttpMethod.PUT || method == HttpMethod.PATCH) {
 			// requires a body
 			try {
@@ -171,7 +171,7 @@ abstract class AbstractHttpRequestFactoryTests extends AbstractMockWebServerTest
 
 	@Test
 	void queryParameters() throws Exception {
-		URI uri = new URI(baseUrl + "/params?param1=value¶m2=value1¶m2=value2");
+		URI uri = URI.create(baseUrl + "/params?param1=value¶m2=value1¶m2=value2");
 		ClientHttpRequest request = factory.createRequest(uri, HttpMethod.GET);
 
 		try (ClientHttpResponse response = request.execute()) {
diff --git a/spring-web/src/test/java/org/springframework/http/client/BufferingClientHttpRequestFactoryTests.java b/spring-web/src/test/java/org/springframework/http/client/BufferingClientHttpRequestFactoryTests.java
index 131a923b55..3f0a595ddf 100644
--- a/spring-web/src/test/java/org/springframework/http/client/BufferingClientHttpRequestFactoryTests.java
+++ b/spring-web/src/test/java/org/springframework/http/client/BufferingClientHttpRequestFactoryTests.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2020 the original author or authors.
+ * Copyright 2002-2022 the original author or authors.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -36,7 +36,7 @@ class BufferingClientHttpRequestFactoryTests extends AbstractHttpRequestFactoryT
 
 	@Test
 	void repeatableRead() throws Exception {
-		ClientHttpRequest request = factory.createRequest(new URI(baseUrl + "/echo"), HttpMethod.PUT);
+		ClientHttpRequest request = factory.createRequest(URI.create(baseUrl + "/echo"), HttpMethod.PUT);
 		assertThat(request.getMethod()).as("Invalid HTTP method").isEqualTo(HttpMethod.PUT);
 		String headerName = "MyHeader";
 		String headerValue1 = "value1";
diff --git a/spring-web/src/test/java/org/springframework/http/client/HttpComponentsClientHttpRequestFactoryTests.java b/spring-web/src/test/java/org/springframework/http/client/HttpComponentsClientHttpRequestFactoryTests.java
index 29c30d8c4c..d1d355ccfc 100644
--- a/spring-web/src/test/java/org/springframework/http/client/HttpComponentsClientHttpRequestFactoryTests.java
+++ b/spring-web/src/test/java/org/springframework/http/client/HttpComponentsClientHttpRequestFactoryTests.java
@@ -60,7 +60,7 @@ class HttpComponentsClientHttpRequestFactoryTests extends AbstractHttpRequestFac
 		hrf.setConnectTimeout(1234);
 		hrf.setConnectionRequestTimeout(4321);
 
-		URI uri = new URI(baseUrl + "/status/ok");
+		URI uri = URI.create(baseUrl + "/status/ok");
 		HttpComponentsClientHttpRequest request = (HttpComponentsClientHttpRequest) hrf.createRequest(uri, HttpMethod.GET);
 
 		Object config = request.getHttpContext().getAttribute(HttpClientContext.REQUEST_CONFIG);
@@ -146,7 +146,7 @@ class HttpComponentsClientHttpRequestFactoryTests extends AbstractHttpRequestFac
 	}
 
 	private RequestConfig retrieveRequestConfig(HttpComponentsClientHttpRequestFactory factory) throws Exception {
-		URI uri = new URI(baseUrl + "/status/ok");
+		URI uri = URI.create(baseUrl + "/status/ok");
 		HttpComponentsClientHttpRequest request = (HttpComponentsClientHttpRequest)
 				factory.createRequest(uri, HttpMethod.GET);
 		return (RequestConfig) request.getHttpContext().getAttribute(HttpClientContext.REQUEST_CONFIG);
diff --git a/spring-web/src/test/java/org/springframework/http/client/InterceptingClientHttpRequestFactoryTests.java b/spring-web/src/test/java/org/springframework/http/client/InterceptingClientHttpRequestFactoryTests.java
index 017ca334dd..71cbc9eae8 100644
--- a/spring-web/src/test/java/org/springframework/http/client/InterceptingClientHttpRequestFactoryTests.java
+++ b/spring-web/src/test/java/org/springframework/http/client/InterceptingClientHttpRequestFactoryTests.java
@@ -61,7 +61,7 @@ class InterceptingClientHttpRequestFactoryTests {
 		interceptors.add(new NoOpInterceptor());
 		requestFactory = new InterceptingClientHttpRequestFactory(requestFactoryMock, interceptors);
 
-		ClientHttpRequest request = requestFactory.createRequest(new URI("https://example.com"), HttpMethod.GET);
+		ClientHttpRequest request = requestFactory.createRequest(URI.create("https://example.com"), HttpMethod.GET);
 		ClientHttpResponse response = request.execute();
 
 		assertThat(((NoOpInterceptor) interceptors.get(0)).invoked).isTrue();
@@ -79,7 +79,7 @@ class InterceptingClientHttpRequestFactoryTests {
 		interceptors.add(new NoOpInterceptor());
 		requestFactory = new InterceptingClientHttpRequestFactory(requestFactoryMock, interceptors);
 
-		ClientHttpRequest request = requestFactory.createRequest(new URI("https://example.com"), HttpMethod.GET);
+		ClientHttpRequest request = requestFactory.createRequest(URI.create("https://example.com"), HttpMethod.GET);
 		ClientHttpResponse response = request.execute();
 
 		assertThat(((NoOpInterceptor) interceptors.get(1)).invoked).isFalse();
@@ -113,13 +113,13 @@ class InterceptingClientHttpRequestFactoryTests {
 
 		requestFactory = new InterceptingClientHttpRequestFactory(requestFactoryMock, Collections.singletonList(interceptor));
 
-		ClientHttpRequest request = requestFactory.createRequest(new URI("https://example.com"), HttpMethod.GET);
+		ClientHttpRequest request = requestFactory.createRequest(URI.create("https://example.com"), HttpMethod.GET);
 		request.execute();
 	}
 
 	@Test
 	void changeURI() throws Exception {
-		final URI changedUri = new URI("https://example.com/2");
+		final URI changedUri = URI.create("https://example.com/2");
 
 		ClientHttpRequestInterceptor interceptor = (request, body, execution) -> execution.execute(new HttpRequestWrapper(request) {
 			@Override
@@ -139,7 +139,7 @@ class InterceptingClientHttpRequestFactoryTests {
 
 		requestFactory = new InterceptingClientHttpRequestFactory(requestFactoryMock, Collections.singletonList(interceptor));
 
-		ClientHttpRequest request = requestFactory.createRequest(new URI("https://example.com"), HttpMethod.GET);
+		ClientHttpRequest request = requestFactory.createRequest(URI.create("https://example.com"), HttpMethod.GET);
 		request.execute();
 	}
 
@@ -165,7 +165,7 @@ class InterceptingClientHttpRequestFactoryTests {
 
 		requestFactory = new InterceptingClientHttpRequestFactory(requestFactoryMock, Collections.singletonList(interceptor));
 
-		ClientHttpRequest request = requestFactory.createRequest(new URI("https://example.com"), HttpMethod.GET);
+		ClientHttpRequest request = requestFactory.createRequest(URI.create("https://example.com"), HttpMethod.GET);
 		request.execute();
 	}
 
@@ -177,7 +177,7 @@ class InterceptingClientHttpRequestFactoryTests {
 
 		requestFactory = new InterceptingClientHttpRequestFactory(requestFactoryMock, Collections.singletonList(interceptor));
 
-		ClientHttpRequest request = requestFactory.createRequest(new URI("https://example.com"), HttpMethod.GET);
+		ClientHttpRequest request = requestFactory.createRequest(URI.create("https://example.com"), HttpMethod.GET);
 		request.execute();
 		assertThat(Arrays.equals(changedBody, requestMock.getBodyAsBytes())).isTrue();
 	}
diff --git a/spring-web/src/test/java/org/springframework/http/client/StreamingSimpleClientHttpRequestFactoryTests.java b/spring-web/src/test/java/org/springframework/http/client/StreamingSimpleClientHttpRequestFactoryTests.java
index 9bc295a253..00350e3373 100644
--- a/spring-web/src/test/java/org/springframework/http/client/StreamingSimpleClientHttpRequestFactoryTests.java
+++ b/spring-web/src/test/java/org/springframework/http/client/StreamingSimpleClientHttpRequestFactoryTests.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2019 the original author or authors.
+ * Copyright 2002-2022 the original author or authors.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -55,7 +55,7 @@ public class StreamingSimpleClientHttpRequestFactoryTests extends AbstractHttpRe
 
 		ClientHttpResponse response = null;
 		try {
-			ClientHttpRequest request = factory.createRequest(new URI(baseUrl + "/echo"), HttpMethod.GET);
+			ClientHttpRequest request = factory.createRequest(URI.create(baseUrl + "/echo"), HttpMethod.GET);
 			response = request.execute();
 			assertThat(response.getStatusCode()).as("Invalid response status").isEqualTo(HttpStatus.OK);
 			HttpHeaders responseHeaders = response.getHeaders();
@@ -74,7 +74,7 @@ public class StreamingSimpleClientHttpRequestFactoryTests extends AbstractHttpRe
 		Random rnd = new Random();
 		ClientHttpResponse response = null;
 		try {
-			ClientHttpRequest request = factory.createRequest(new URI(baseUrl + "/methods/post"), HttpMethod.POST);
+			ClientHttpRequest request = factory.createRequest(URI.create(baseUrl + "/methods/post"), HttpMethod.POST);
 			final int BUF_SIZE = 4096;
 			final int ITERATIONS = Integer.MAX_VALUE / BUF_SIZE;
 			// final int contentLength = ITERATIONS * BUF_SIZE;
diff --git a/spring-web/src/test/java/org/springframework/http/server/ServletServerHttpRequestTests.java b/spring-web/src/test/java/org/springframework/http/server/ServletServerHttpRequestTests.java
index 4132e70675..d2ccc761e7 100644
--- a/spring-web/src/test/java/org/springframework/http/server/ServletServerHttpRequestTests.java
+++ b/spring-web/src/test/java/org/springframework/http/server/ServletServerHttpRequestTests.java
@@ -59,7 +59,7 @@ public class ServletServerHttpRequestTests {
 
 	@Test
 	void getUriForSimplePath() throws URISyntaxException {
-		URI uri = new URI("https://example.com/path");
+		URI uri = URI.create("https://example.com/path");
 		mockRequest.setScheme(uri.getScheme());
 		mockRequest.setServerName(uri.getHost());
 		mockRequest.setServerPort(uri.getPort());
@@ -70,7 +70,7 @@ public class ServletServerHttpRequestTests {
 
 	@Test
 	void getUriWithQueryString() throws URISyntaxException {
-		URI uri = new URI("https://example.com/path?query");
+		URI uri = URI.create("https://example.com/path?query");
 		mockRequest.setScheme(uri.getScheme());
 		mockRequest.setServerName(uri.getHost());
 		mockRequest.setServerPort(uri.getPort());
@@ -86,7 +86,7 @@ public class ServletServerHttpRequestTests {
 		mockRequest.setServerName("example.com");
 		mockRequest.setRequestURI("/path");
 		mockRequest.setQueryString("query=foo");
-		assertThat(request.getURI()).isEqualTo(new URI("https://example.com/path?query=foo"));
+		assertThat(request.getURI()).isEqualTo(URI.create("https://example.com/path?query=foo"));
 	}
 
 	@Test  // SPR-16414
@@ -96,12 +96,12 @@ public class ServletServerHttpRequestTests {
 		mockRequest.setServerName("example.com");
 		mockRequest.setRequestURI("/path");
 		mockRequest.setQueryString("query=foo%%x");
-		assertThat(request.getURI()).isEqualTo(new URI("https://example.com/path"));
+		assertThat(request.getURI()).isEqualTo(URI.create("https://example.com/path"));
 	}
 
 	@Test  // SPR-13876
 	void getUriWithEncoding() throws URISyntaxException {
-		URI uri = new URI("https://example.com/%E4%B8%AD%E6%96%87" +
+		URI uri = URI.create("https://example.com/%E4%B8%AD%E6%96%87" +
 				"?redirect=https%3A%2F%2Fgithub.com%2Fspring-projects%2Fspring-framework");
 		mockRequest.setScheme(uri.getScheme());
 		mockRequest.setServerName(uri.getHost());
diff --git a/spring-web/src/test/java/org/springframework/http/server/reactive/AsyncIntegrationTests.java b/spring-web/src/test/java/org/springframework/http/server/reactive/AsyncIntegrationTests.java
index a7c9e22d83..1f7a964a7c 100644
--- a/spring-web/src/test/java/org/springframework/http/server/reactive/AsyncIntegrationTests.java
+++ b/spring-web/src/test/java/org/springframework/http/server/reactive/AsyncIntegrationTests.java
@@ -51,7 +51,7 @@ class AsyncIntegrationTests extends AbstractHttpHandlerIntegrationTests {
 	void basicTest(HttpServer httpServer) throws Exception {
 		startServer(httpServer);
 
-		URI url = new URI("http://localhost:" + port);
+		URI url = URI.create("http://localhost:" + port);
 		@SuppressWarnings("resource")
 		ResponseEntity response = new RestTemplate().exchange(RequestEntity.get(url).build(), String.class);
 
diff --git a/spring-web/src/test/java/org/springframework/http/server/reactive/CookieIntegrationTests.java b/spring-web/src/test/java/org/springframework/http/server/reactive/CookieIntegrationTests.java
index 1484baf05c..85550cf494 100644
--- a/spring-web/src/test/java/org/springframework/http/server/reactive/CookieIntegrationTests.java
+++ b/spring-web/src/test/java/org/springframework/http/server/reactive/CookieIntegrationTests.java
@@ -51,7 +51,7 @@ public class CookieIntegrationTests extends AbstractHttpHandlerIntegrationTests
 	public void basicTest(HttpServer httpServer) throws Exception {
 		startServer(httpServer);
 
-		URI url = new URI("http://localhost:" + port);
+		URI url = URI.create("http://localhost:" + port);
 		String header = "SID=31d4d96e407aad42; lang=en-US";
 		@SuppressWarnings("resource")
 		ResponseEntity response = new RestTemplate().exchange(
diff --git a/spring-web/src/test/java/org/springframework/http/server/reactive/EchoHandlerIntegrationTests.java b/spring-web/src/test/java/org/springframework/http/server/reactive/EchoHandlerIntegrationTests.java
index f3e6e546bc..aedf61a0fa 100644
--- a/spring-web/src/test/java/org/springframework/http/server/reactive/EchoHandlerIntegrationTests.java
+++ b/spring-web/src/test/java/org/springframework/http/server/reactive/EchoHandlerIntegrationTests.java
@@ -53,7 +53,7 @@ public class EchoHandlerIntegrationTests extends AbstractHttpHandlerIntegrationT
 		RestTemplate restTemplate = new RestTemplate();
 
 		byte[] body = randomBytes();
-		RequestEntity request = RequestEntity.post(new URI("http://localhost:" + port)).body(body);
+		RequestEntity request = RequestEntity.post(URI.create("http://localhost:" + port)).body(body);
 		ResponseEntity response = restTemplate.exchange(request, byte[].class);
 
 		assertThat(response.getBody()).isEqualTo(body);
diff --git a/spring-web/src/test/java/org/springframework/http/server/reactive/ErrorHandlerIntegrationTests.java b/spring-web/src/test/java/org/springframework/http/server/reactive/ErrorHandlerIntegrationTests.java
index 8f3fc32fb7..bcb336e2c1 100644
--- a/spring-web/src/test/java/org/springframework/http/server/reactive/ErrorHandlerIntegrationTests.java
+++ b/spring-web/src/test/java/org/springframework/http/server/reactive/ErrorHandlerIntegrationTests.java
@@ -53,7 +53,7 @@ class ErrorHandlerIntegrationTests extends AbstractHttpHandlerIntegrationTests {
 		RestTemplate restTemplate = new RestTemplate();
 		restTemplate.setErrorHandler(NO_OP_ERROR_HANDLER);
 
-		URI url = new URI("http://localhost:" + port + "/response-body-error");
+		URI url = URI.create("http://localhost:" + port + "/response-body-error");
 		ResponseEntity response = restTemplate.getForEntity(url, String.class);
 
 		assertThat(response.getStatusCode()).isEqualTo(HttpStatus.INTERNAL_SERVER_ERROR);
@@ -67,7 +67,7 @@ class ErrorHandlerIntegrationTests extends AbstractHttpHandlerIntegrationTests {
 		RestTemplate restTemplate = new RestTemplate();
 		restTemplate.setErrorHandler(NO_OP_ERROR_HANDLER);
 
-		URI url = new URI("http://localhost:" + port + "/handling-error");
+		URI url = URI.create("http://localhost:" + port + "/handling-error");
 		ResponseEntity response = restTemplate.getForEntity(url, String.class);
 
 		assertThat(response.getStatusCode()).isEqualTo(HttpStatus.INTERNAL_SERVER_ERROR);
@@ -81,7 +81,7 @@ class ErrorHandlerIntegrationTests extends AbstractHttpHandlerIntegrationTests {
 		RestTemplate restTemplate = new RestTemplate();
 		restTemplate.setErrorHandler(NO_OP_ERROR_HANDLER);
 
-		URI url = new URI("http://localhost:" + port + "//");
+		URI url = URI.create("http://localhost:" + port + "//");
 		ResponseEntity response = restTemplate.getForEntity(url, String.class);
 
 		// Jetty 10+ rejects empty path segments, see https://github.com/eclipse/jetty.project/issues/6302,
diff --git a/spring-web/src/test/java/org/springframework/http/server/reactive/MultipartHttpHandlerIntegrationTests.java b/spring-web/src/test/java/org/springframework/http/server/reactive/MultipartHttpHandlerIntegrationTests.java
index d95841cd74..59c8a87da7 100644
--- a/spring-web/src/test/java/org/springframework/http/server/reactive/MultipartHttpHandlerIntegrationTests.java
+++ b/spring-web/src/test/java/org/springframework/http/server/reactive/MultipartHttpHandlerIntegrationTests.java
@@ -61,7 +61,7 @@ class MultipartHttpHandlerIntegrationTests extends AbstractHttpHandlerIntegratio
 		@SuppressWarnings("resource")
 		RestTemplate restTemplate = new RestTemplate();
 		RequestEntity> request = RequestEntity
-				.post(new URI("http://localhost:" + port + "/form-parts"))
+				.post(URI.create("http://localhost:" + port + "/form-parts"))
 				.contentType(MediaType.MULTIPART_FORM_DATA)
 				.body(generateBody());
 		ResponseEntity response = restTemplate.exchange(request, Void.class);
diff --git a/spring-web/src/test/java/org/springframework/http/server/reactive/RandomHandlerIntegrationTests.java b/spring-web/src/test/java/org/springframework/http/server/reactive/RandomHandlerIntegrationTests.java
index 92aa97f49b..350673828b 100644
--- a/spring-web/src/test/java/org/springframework/http/server/reactive/RandomHandlerIntegrationTests.java
+++ b/spring-web/src/test/java/org/springframework/http/server/reactive/RandomHandlerIntegrationTests.java
@@ -63,7 +63,7 @@ class RandomHandlerIntegrationTests extends AbstractHttpHandlerIntegrationTests
 		RestTemplate restTemplate = new RestTemplate();
 
 		byte[] body = randomBytes();
-		RequestEntity request = RequestEntity.post(new URI("http://localhost:" + port)).body(body);
+		RequestEntity request = RequestEntity.post(URI.create("http://localhost:" + port)).body(body);
 		ResponseEntity response = restTemplate.exchange(request, byte[].class);
 
 		assertThat(response.getBody()).isNotNull();
diff --git a/spring-web/src/test/java/org/springframework/http/server/reactive/ServerHttpRequestIntegrationTests.java b/spring-web/src/test/java/org/springframework/http/server/reactive/ServerHttpRequestIntegrationTests.java
index b75b8b2eea..34ed853aa7 100644
--- a/spring-web/src/test/java/org/springframework/http/server/reactive/ServerHttpRequestIntegrationTests.java
+++ b/spring-web/src/test/java/org/springframework/http/server/reactive/ServerHttpRequestIntegrationTests.java
@@ -44,7 +44,7 @@ class ServerHttpRequestIntegrationTests extends AbstractHttpHandlerIntegrationTe
 	void checkUri(HttpServer httpServer) throws Exception {
 		startServer(httpServer);
 
-		URI url = new URI("http://localhost:" + port + "/foo?param=bar");
+		URI url = URI.create("http://localhost:" + port + "/foo?param=bar");
 		RequestEntity request = RequestEntity.post(url).build();
 		@SuppressWarnings("resource")
 		ResponseEntity response = new RestTemplate().exchange(request, Void.class);
diff --git a/spring-web/src/test/java/org/springframework/http/server/reactive/ServerHttpsRequestIntegrationTests.java b/spring-web/src/test/java/org/springframework/http/server/reactive/ServerHttpsRequestIntegrationTests.java
index 3ea0082a34..63a5d728c0 100644
--- a/spring-web/src/test/java/org/springframework/http/server/reactive/ServerHttpsRequestIntegrationTests.java
+++ b/spring-web/src/test/java/org/springframework/http/server/reactive/ServerHttpsRequestIntegrationTests.java
@@ -86,7 +86,7 @@ class ServerHttpsRequestIntegrationTests {
 
 	@Test
 	void checkUri() throws Exception {
-		URI url = new URI("https://localhost:" + port + "/foo?param=bar");
+		URI url = URI.create("https://localhost:" + port + "/foo?param=bar");
 		RequestEntity request = RequestEntity.post(url).build();
 		ResponseEntity response = this.restTemplate.exchange(request, Void.class);
 		assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
diff --git a/spring-web/src/test/java/org/springframework/http/server/reactive/WriteOnlyHandlerIntegrationTests.java b/spring-web/src/test/java/org/springframework/http/server/reactive/WriteOnlyHandlerIntegrationTests.java
index fd3217f448..266d19d65e 100644
--- a/spring-web/src/test/java/org/springframework/http/server/reactive/WriteOnlyHandlerIntegrationTests.java
+++ b/spring-web/src/test/java/org/springframework/http/server/reactive/WriteOnlyHandlerIntegrationTests.java
@@ -58,9 +58,8 @@ class WriteOnlyHandlerIntegrationTests extends AbstractHttpHandlerIntegrationTes
 		RestTemplate restTemplate = new RestTemplate();
 
 		this.body = randomBytes();
-		RequestEntity request = RequestEntity.post(
-				new URI("http://localhost:" + port)).body(
-						"".getBytes(StandardCharsets.UTF_8));
+		RequestEntity request = RequestEntity.post(URI.create("http://localhost:" + port))
+				.body("".getBytes(StandardCharsets.UTF_8));
 		ResponseEntity response = restTemplate.exchange(request, byte[].class);
 
 		assertThat(response.getBody()).isEqualTo(body);
diff --git a/spring-web/src/test/java/org/springframework/http/server/reactive/ZeroCopyIntegrationTests.java b/spring-web/src/test/java/org/springframework/http/server/reactive/ZeroCopyIntegrationTests.java
index 9567e22020..36c672a417 100644
--- a/spring-web/src/test/java/org/springframework/http/server/reactive/ZeroCopyIntegrationTests.java
+++ b/spring-web/src/test/java/org/springframework/http/server/reactive/ZeroCopyIntegrationTests.java
@@ -59,7 +59,7 @@ class ZeroCopyIntegrationTests extends AbstractHttpHandlerIntegrationTests {
 
 		startServer(httpServer);
 
-		URI url = new URI("http://localhost:" + port);
+		URI url = URI.create("http://localhost:" + port);
 		RequestEntity request = RequestEntity.get(url).build();
 		@SuppressWarnings("resource")
 		ResponseEntity response = new RestTemplate().exchange(request, byte[].class);
diff --git a/spring-web/src/test/java/org/springframework/web/client/RestTemplateIntegrationTests.java b/spring-web/src/test/java/org/springframework/web/client/RestTemplateIntegrationTests.java
index b1076e844e..d5f1018ccc 100644
--- a/spring-web/src/test/java/org/springframework/web/client/RestTemplateIntegrationTests.java
+++ b/spring-web/src/test/java/org/springframework/web/client/RestTemplateIntegrationTests.java
@@ -199,7 +199,7 @@ class RestTemplateIntegrationTests extends AbstractMockWebServerTests {
 		setUpClient(clientHttpRequestFactory);
 
 		URI location = template.postForLocation(baseUrl + "/{method}", helloWorld, "post");
-		assertThat(location).as("Invalid location").isEqualTo(new URI(baseUrl + "/post/1"));
+		assertThat(location).as("Invalid location").isEqualTo(URI.create(baseUrl + "/post/1"));
 	}
 
 	@ParameterizedRestTemplateTest
@@ -210,7 +210,7 @@ class RestTemplateIntegrationTests extends AbstractMockWebServerTests {
 		entityHeaders.setContentType(new MediaType("text", "plain", StandardCharsets.ISO_8859_1));
 		HttpEntity entity = new HttpEntity<>(helloWorld, entityHeaders);
 		URI location = template.postForLocation(baseUrl + "/{method}", entity, "post");
-		assertThat(location).as("Invalid location").isEqualTo(new URI(baseUrl + "/post/1"));
+		assertThat(location).as("Invalid location").isEqualTo(URI.create(baseUrl + "/post/1"));
 	}
 
 	@ParameterizedRestTemplateTest
@@ -274,7 +274,7 @@ class RestTemplateIntegrationTests extends AbstractMockWebServerTests {
 	void optionsForAllow(ClientHttpRequestFactory clientHttpRequestFactory) throws Exception {
 		setUpClient(clientHttpRequestFactory);
 
-		Set allowed = template.optionsForAllow(new URI(baseUrl + "/get"));
+		Set allowed = template.optionsForAllow(URI.create(baseUrl + "/get"));
 		assertThat(allowed).as("Invalid response").isEqualTo(Set.of(HttpMethod.GET, HttpMethod.OPTIONS, HttpMethod.HEAD, HttpMethod.TRACE));
 	}
 
@@ -371,7 +371,7 @@ class RestTemplateIntegrationTests extends AbstractMockWebServerTests {
 		requestHeaders.setContentType(MediaType.TEXT_PLAIN);
 		HttpEntity entity = new HttpEntity<>(helloWorld, requestHeaders);
 		HttpEntity result = template.exchange(baseUrl + "/{method}", POST, entity, Void.class, "post");
-		assertThat(result.getHeaders().getLocation()).as("Invalid location").isEqualTo(new URI(baseUrl + "/post/1"));
+		assertThat(result.getHeaders().getLocation()).as("Invalid location").isEqualTo(URI.create(baseUrl + "/post/1"));
 		assertThat(result.hasBody()).isFalse();
 	}
 
@@ -425,7 +425,7 @@ class RestTemplateIntegrationTests extends AbstractMockWebServerTests {
 		list.add(new Bar("bar"));
 		ParameterizedTypeReference typeReference = new ParameterizedTypeReference>() {};
 		RequestEntity> entity = RequestEntity
-				.post(new URI(baseUrl + "/jsonpost"))
+				.post(URI.create(baseUrl + "/jsonpost"))
 				.contentType(new MediaType("application", "json", StandardCharsets.UTF_8))
 				.body(list, typeReference.getType());
 		String content = template.exchange(entity, String.class).getBody();
diff --git a/spring-web/src/test/java/org/springframework/web/client/RestTemplateObservationTests.java b/spring-web/src/test/java/org/springframework/web/client/RestTemplateObservationTests.java
index b85de7fc2f..69afc5269c 100644
--- a/spring-web/src/test/java/org/springframework/web/client/RestTemplateObservationTests.java
+++ b/spring-web/src/test/java/org/springframework/web/client/RestTemplateObservationTests.java
@@ -122,7 +122,7 @@ class RestTemplateObservationTests {
 		mockSentRequest(GET, url);
 		mockResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR);
 		willThrow(new HttpServerErrorException(HttpStatus.INTERNAL_SERVER_ERROR))
-				.given(errorHandler).handleError(new URI(url), GET, response);
+				.given(errorHandler).handleError(URI.create(url), GET, response);
 
 		assertThatExceptionOfType(HttpServerErrorException.class).isThrownBy(() ->
 				template.execute(url, GET, null, null));
@@ -164,7 +164,7 @@ class RestTemplateObservationTests {
 	}
 
 	private void mockSentRequest(HttpMethod method, String uri, HttpHeaders requestHeaders) throws Exception {
-		given(requestFactory.createRequest(new URI(uri), method)).willReturn(request);
+		given(requestFactory.createRequest(URI.create(uri), method)).willReturn(request);
 		given(request.getHeaders()).willReturn(requestHeaders);
 		given(request.getMethod()).willReturn(method);
 		given(request.getURI()).willReturn(URI.create(uri));
diff --git a/spring-web/src/test/java/org/springframework/web/client/RestTemplateTests.java b/spring-web/src/test/java/org/springframework/web/client/RestTemplateTests.java
index 6aa8d48b96..3057543b31 100644
--- a/spring-web/src/test/java/org/springframework/web/client/RestTemplateTests.java
+++ b/spring-web/src/test/java/org/springframework/web/client/RestTemplateTests.java
@@ -196,7 +196,7 @@ class RestTemplateTests {
 		mockSentRequest(GET, url);
 		mockResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR);
 		willThrow(new HttpServerErrorException(HttpStatus.INTERNAL_SERVER_ERROR))
-				.given(errorHandler).handleError(new URI(url), GET, response);
+				.given(errorHandler).handleError(URI.create(url), GET, response);
 
 		assertThatExceptionOfType(HttpServerErrorException.class).isThrownBy(() ->
 				template.execute(url, GET, null, null));
@@ -318,7 +318,7 @@ class RestTemplateTests {
 		mockResponseStatus(HttpStatus.OK);
 		String helloWorld = "Hello World";
 		HttpHeaders responseHeaders = new HttpHeaders();
-		URI expected = new URI("https://example.com/hotels");
+		URI expected = URI.create("https://example.com/hotels");
 		responseHeaders.setLocation(expected);
 		given(response.getHeaders()).willReturn(responseHeaders);
 
@@ -336,7 +336,7 @@ class RestTemplateTests {
 
 		String helloWorld = "Hello World";
 		HttpHeaders responseHeaders = new HttpHeaders();
-		URI expected = new URI("https://example.com/hotels");
+		URI expected = URI.create("https://example.com/hotels");
 		responseHeaders.setLocation(expected);
 		given(response.getHeaders()).willReturn(responseHeaders);
 
@@ -357,7 +357,7 @@ class RestTemplateTests {
 		mockTextPlainHttpMessageConverter();
 		mockResponseStatus(HttpStatus.OK);
 		HttpHeaders responseHeaders = new HttpHeaders();
-		URI expected = new URI("https://example.com/hotels");
+		URI expected = URI.create("https://example.com/hotels");
 		responseHeaders.setLocation(expected);
 		given(response.getHeaders()).willReturn(responseHeaders);
 
@@ -762,7 +762,7 @@ class RestTemplateTests {
 	}
 
 	private void mockSentRequest(HttpMethod method, String uri, HttpHeaders requestHeaders) throws Exception {
-		given(requestFactory.createRequest(new URI(uri), method)).willReturn(request);
+		given(requestFactory.createRequest(URI.create(uri), method)).willReturn(request);
 		given(request.getHeaders()).willReturn(requestHeaders);
 	}
 
diff --git a/spring-web/src/test/java/org/springframework/web/multipart/support/RequestPartServletServerHttpRequestTests.java b/spring-web/src/test/java/org/springframework/web/multipart/support/RequestPartServletServerHttpRequestTests.java
index 28aebfa7e8..2298ec981c 100644
--- a/spring-web/src/test/java/org/springframework/web/multipart/support/RequestPartServletServerHttpRequestTests.java
+++ b/spring-web/src/test/java/org/springframework/web/multipart/support/RequestPartServletServerHttpRequestTests.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2020 the original author or authors.
+ * Copyright 2002-2022 the original author or authors.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -58,7 +58,7 @@ public class RequestPartServletServerHttpRequestTests {
 		this.mockRequest.addFile(new MockMultipartFile("part", "", "application/json", "content".getBytes("UTF-8")));
 		ServerHttpRequest request = new RequestPartServletServerHttpRequest(this.mockRequest, "part");
 
-		URI uri = new URI("https://example.com/path?query");
+		URI uri = URI.create("https://example.com/path?query");
 		this.mockRequest.setScheme(uri.getScheme());
 		this.mockRequest.setServerName(uri.getHost());
 		this.mockRequest.setServerPort(uri.getPort());
diff --git a/spring-web/src/test/java/org/springframework/web/server/adapter/ForwardedHeaderTransformerTests.java b/spring-web/src/test/java/org/springframework/web/server/adapter/ForwardedHeaderTransformerTests.java
index d4897b8291..e5bed965ff 100644
--- a/spring-web/src/test/java/org/springframework/web/server/adapter/ForwardedHeaderTransformerTests.java
+++ b/spring-web/src/test/java/org/springframework/web/server/adapter/ForwardedHeaderTransformerTests.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2020 the original author or authors.
+ * Copyright 2002-2022 the original author or authors.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -18,7 +18,6 @@ package org.springframework.web.server.adapter;
 
 import java.net.InetSocketAddress;
 import java.net.URI;
-import java.net.URISyntaxException;
 
 import org.junit.jupiter.api.Test;
 
@@ -31,9 +30,10 @@ import static org.assertj.core.api.Assertions.assertThat;
 
 /**
  * Unit tests for {@link ForwardedHeaderTransformer}.
+ *
  * @author Rossen Stoyanchev
  */
-public class ForwardedHeaderTransformerTests {
+class ForwardedHeaderTransformerTests {
 
 	private static final String BASE_URL = "https://example.com/path";
 
@@ -65,7 +65,7 @@ public class ForwardedHeaderTransformerTests {
 		headers.add("foo", "bar");
 		ServerHttpRequest request = this.requestMutator.apply(getRequest(headers));
 
-		assertThat(request.getURI()).isEqualTo(new URI("https://84.198.58.199/path"));
+		assertThat(request.getURI()).isEqualTo(URI.create("https://84.198.58.199/path"));
 		assertForwardedHeadersRemoved(request);
 	}
 
@@ -75,7 +75,7 @@ public class ForwardedHeaderTransformerTests {
 		headers.add("Forwarded", "host=84.198.58.199;proto=https");
 		ServerHttpRequest request = this.requestMutator.apply(getRequest(headers));
 
-		assertThat(request.getURI()).isEqualTo(new URI("https://84.198.58.199/path"));
+		assertThat(request.getURI()).isEqualTo(URI.create("https://84.198.58.199/path"));
 		assertForwardedHeadersRemoved(request);
 	}
 
@@ -85,7 +85,7 @@ public class ForwardedHeaderTransformerTests {
 		headers.add("X-Forwarded-Prefix", "/prefix");
 		ServerHttpRequest request = this.requestMutator.apply(getRequest(headers));
 
-		assertThat(request.getURI()).isEqualTo(new URI("https://example.com/prefix/path"));
+		assertThat(request.getURI()).isEqualTo(URI.create("https://example.com/prefix/path"));
 		assertThat(request.getPath().value()).isEqualTo("/prefix/path");
 		assertForwardedHeadersRemoved(request);
 	}
@@ -95,13 +95,13 @@ public class ForwardedHeaderTransformerTests {
 		HttpHeaders headers = new HttpHeaders();
 		headers.add("X-Forwarded-Prefix", "/prefix");
 		ServerHttpRequest request = MockServerHttpRequest
-				.method(HttpMethod.GET, new URI("https://example.com/a%20b?q=a%2Bb"))
+				.method(HttpMethod.GET, URI.create("https://example.com/a%20b?q=a%2Bb"))
 				.headers(headers)
 				.build();
 
 		request = this.requestMutator.apply(request);
 
-		assertThat(request.getURI()).isEqualTo(new URI("https://example.com/prefix/a%20b?q=a%2Bb"));
+		assertThat(request.getURI()).isEqualTo(URI.create("https://example.com/prefix/a%20b?q=a%2Bb"));
 		assertThat(request.getPath().value()).isEqualTo("/prefix/a%20b");
 		assertForwardedHeadersRemoved(request);
 	}
@@ -112,7 +112,7 @@ public class ForwardedHeaderTransformerTests {
 		headers.add("X-Forwarded-Prefix", "/prefix////");
 		ServerHttpRequest request = this.requestMutator.apply(getRequest(headers));
 
-		assertThat(request.getURI()).isEqualTo(new URI("https://example.com/prefix/path"));
+		assertThat(request.getURI()).isEqualTo(URI.create("https://example.com/prefix/path"));
 		assertThat(request.getPath().value()).isEqualTo("/prefix/path");
 		assertForwardedHeadersRemoved(request);
 	}
@@ -123,13 +123,13 @@ public class ForwardedHeaderTransformerTests {
 		headers.add("Forwarded", "host=84.198.58.199;proto=https");
 
 		ServerHttpRequest request = MockServerHttpRequest
-				.method(HttpMethod.GET, new URI("https://example.com/a%20b?q=a%2Bb"))
+				.method(HttpMethod.GET, URI.create("https://example.com/a%20b?q=a%2Bb"))
 				.headers(headers)
 				.build();
 
 		request = this.requestMutator.apply(request);
 
-		assertThat(request.getURI()).isEqualTo(new URI("https://84.198.58.199/a%20b?q=a%2Bb"));
+		assertThat(request.getURI()).isEqualTo(URI.create("https://84.198.58.199/a%20b?q=a%2Bb"));
 		assertForwardedHeadersRemoved(request);
 	}
 
@@ -139,7 +139,7 @@ public class ForwardedHeaderTransformerTests {
 		headers.add("X-Forwarded-Prefix", "/first,/second");
 		ServerHttpRequest request = this.requestMutator.apply(getRequest(headers));
 
-		assertThat(request.getURI()).isEqualTo(new URI("https://example.com/first/second/path"));
+		assertThat(request.getURI()).isEqualTo(URI.create("https://example.com/first/second/path"));
 		assertThat(request.getPath().value()).isEqualTo("/first/second/path");
 		assertForwardedHeadersRemoved(request);
 	}
@@ -150,20 +150,20 @@ public class ForwardedHeaderTransformerTests {
 		headers.add("X-Forwarded-Prefix", "/first/,/second//");
 		ServerHttpRequest request = this.requestMutator.apply(getRequest(headers));
 
-		assertThat(request.getURI()).isEqualTo(new URI("https://example.com/first/second/path"));
+		assertThat(request.getURI()).isEqualTo(URI.create("https://example.com/first/second/path"));
 		assertThat(request.getPath().value()).isEqualTo("/first/second/path");
 		assertForwardedHeadersRemoved(request);
 	}
 
 	@Test
-	public void forwardedForNotPresent() throws URISyntaxException {
+	void forwardedForNotPresent() {
 		HttpHeaders headers = new HttpHeaders();
 		headers.add("Forwarded", "host=84.198.58.199;proto=https");
 
 		InetSocketAddress remoteAddress = new InetSocketAddress("example.client", 47011);
 
 		ServerHttpRequest request = MockServerHttpRequest
-				.method(HttpMethod.GET, new URI("https://example.com/a%20b?q=a%2Bb"))
+				.method(HttpMethod.GET, URI.create("https://example.com/a%20b?q=a%2Bb"))
 				.remoteAddress(remoteAddress)
 				.headers(headers)
 				.build();
@@ -173,14 +173,14 @@ public class ForwardedHeaderTransformerTests {
 	}
 
 	@Test
-	public void forwardedFor() throws URISyntaxException {
+	void forwardedFor() {
 		HttpHeaders headers = new HttpHeaders();
 		headers.add("Forwarded", "for=\"203.0.113.195:4711\";host=84.198.58.199;proto=https");
 
 		InetSocketAddress remoteAddress = new InetSocketAddress("example.client", 47011);
 
 		ServerHttpRequest request = MockServerHttpRequest
-				.method(HttpMethod.GET, new URI("https://example.com/a%20b?q=a%2Bb"))
+				.method(HttpMethod.GET, URI.create("https://example.com/a%20b?q=a%2Bb"))
 				.remoteAddress(remoteAddress)
 				.headers(headers)
 				.build();
@@ -192,12 +192,12 @@ public class ForwardedHeaderTransformerTests {
 	}
 
 	@Test
-	public void xForwardedFor() throws URISyntaxException {
+	void xForwardedFor() {
 		HttpHeaders headers = new HttpHeaders();
 		headers.add("x-forwarded-for", "203.0.113.195, 70.41.3.18, 150.172.238.178");
 
 		ServerHttpRequest request = MockServerHttpRequest
-				.method(HttpMethod.GET, new URI("https://example.com/a%20b?q=a%2Bb"))
+				.method(HttpMethod.GET, URI.create("https://example.com/a%20b?q=a%2Bb"))
 				.headers(headers)
 				.build();
 
diff --git a/spring-web/src/test/java/org/springframework/web/server/session/WebSessionIntegrationTests.java b/spring-web/src/test/java/org/springframework/web/server/session/WebSessionIntegrationTests.java
index 82a970e9b0..3fed461b2f 100644
--- a/spring-web/src/test/java/org/springframework/web/server/session/WebSessionIntegrationTests.java
+++ b/spring-web/src/test/java/org/springframework/web/server/session/WebSessionIntegrationTests.java
@@ -17,7 +17,6 @@
 package org.springframework.web.server.session;
 
 import java.net.URI;
-import java.net.URISyntaxException;
 import java.time.Clock;
 import java.time.Duration;
 import java.util.List;
@@ -85,7 +84,6 @@ public class WebSessionIntegrationTests extends AbstractHttpHandlerIntegrationTe
 	public void expiredSessionIsRecreated(HttpServer httpServer) throws Exception {
 		startServer(httpServer);
 
-
 		// First request: no session yet, new session created
 		RequestEntity request = RequestEntity.get(createUri()).build();
 		ResponseEntity response = this.restTemplate.exchange(request, Void.class);
@@ -123,7 +121,6 @@ public class WebSessionIntegrationTests extends AbstractHttpHandlerIntegrationTe
 	public void expiredSessionEnds(HttpServer httpServer) throws Exception {
 		startServer(httpServer);
 
-
 		// First request: no session yet, new session created
 		RequestEntity request = RequestEntity.get(createUri()).build();
 		ResponseEntity response = this.restTemplate.exchange(request, Void.class);
@@ -137,7 +134,7 @@ public class WebSessionIntegrationTests extends AbstractHttpHandlerIntegrationTe
 		store.setClock(Clock.offset(store.getClock(), Duration.ofMinutes(31)));
 
 		// Second request: session expires
-		URI uri = new URI("http://localhost:" + this.port + "/?expire");
+		URI uri = URI.create("http://localhost:" + this.port + "/?expire");
 		request = RequestEntity.get(uri).header("Cookie", "SESSION=" + id).build();
 		response = this.restTemplate.exchange(request, Void.class);
 
@@ -151,7 +148,6 @@ public class WebSessionIntegrationTests extends AbstractHttpHandlerIntegrationTe
 	public void changeSessionId(HttpServer httpServer) throws Exception {
 		startServer(httpServer);
 
-
 		// First request: no session yet, new session created
 		RequestEntity request = RequestEntity.get(createUri()).build();
 		ResponseEntity response = this.restTemplate.exchange(request, Void.class);
@@ -162,7 +158,7 @@ public class WebSessionIntegrationTests extends AbstractHttpHandlerIntegrationTe
 		assertThat(this.handler.getSessionRequestCount()).isEqualTo(1);
 
 		// Second request: session id changes
-		URI uri = new URI("http://localhost:" + this.port + "/?changeId");
+		URI uri = URI.create("http://localhost:" + this.port + "/?changeId");
 		request = RequestEntity.get(uri).header("Cookie", "SESSION=" + oldId).build();
 		response = this.restTemplate.exchange(request, Void.class);
 
@@ -186,7 +182,7 @@ public class WebSessionIntegrationTests extends AbstractHttpHandlerIntegrationTe
 		assertThat(id).isNotNull();
 
 		// Second request: invalidates session
-		URI uri = new URI("http://localhost:" + this.port + "/?invalidate");
+		URI uri = URI.create("http://localhost:" + this.port + "/?invalidate");
 		request = RequestEntity.get(uri).header("Cookie", "SESSION=" + id).build();
 		response = this.restTemplate.exchange(request, Void.class);
 
@@ -209,8 +205,8 @@ public class WebSessionIntegrationTests extends AbstractHttpHandlerIntegrationTe
 		return null;
 	}
 
-	private URI createUri() throws URISyntaxException {
-		return new URI("http://localhost:" + this.port + "/");
+	private URI createUri() {
+		return URI.create("http://localhost:" + this.port + "/");
 	}
 
 
diff --git a/spring-web/src/test/java/org/springframework/web/util/UriComponentsBuilderTests.java b/spring-web/src/test/java/org/springframework/web/util/UriComponentsBuilderTests.java
index a7d4e8d429..3de7ca3b25 100644
--- a/spring-web/src/test/java/org/springframework/web/util/UriComponentsBuilderTests.java
+++ b/spring-web/src/test/java/org/springframework/web/util/UriComponentsBuilderTests.java
@@ -17,7 +17,6 @@
 package org.springframework.web.util;
 
 import java.net.URI;
-import java.net.URISyntaxException;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
@@ -78,7 +77,7 @@ class UriComponentsBuilderTests {
 	}
 
 	@Test
-	void plain() throws URISyntaxException {
+	void plain() {
 		UriComponentsBuilder builder = UriComponentsBuilder.newInstance();
 		UriComponents result = builder.scheme("https").host("example.com")
 				.path("foo").queryParam("bar").fragment("baz").build();
@@ -89,12 +88,12 @@ class UriComponentsBuilderTests {
 		assertThat(result.getQuery()).isEqualTo("bar");
 		assertThat(result.getFragment()).isEqualTo("baz");
 
-		URI expected = new URI("https://example.com/foo?bar#baz");
+		URI expected = URI.create("https://example.com/foo?bar#baz");
 		assertThat(result.toUri()).as("Invalid result URI").isEqualTo(expected);
 	}
 
 	@Test
-	void multipleFromSameBuilder() throws URISyntaxException {
+	void multipleFromSameBuilder() {
 		UriComponentsBuilder builder = UriComponentsBuilder.newInstance()
 				.scheme("https").host("example.com").pathSegment("foo");
 		UriComponents result1 = builder.build();
@@ -104,7 +103,7 @@ class UriComponentsBuilderTests {
 		assertThat(result1.getScheme()).isEqualTo("https");
 		assertThat(result1.getHost()).isEqualTo("example.com");
 		assertThat(result1.getPath()).isEqualTo("/foo");
-		URI expected = new URI("https://example.com/foo");
+		URI expected = URI.create("https://example.com/foo");
 		assertThat(result1.toUri()).as("Invalid result URI").isEqualTo(expected);
 
 		assertThat(result2.getScheme()).isEqualTo("https");
@@ -112,12 +111,12 @@ class UriComponentsBuilderTests {
 		assertThat(result2.getPath()).isEqualTo("/foo/foo2");
 		assertThat(result2.getQuery()).isEqualTo("bar");
 		assertThat(result2.getFragment()).isEqualTo("baz");
-		expected = new URI("https://example.com/foo/foo2?bar#baz");
+		expected = URI.create("https://example.com/foo/foo2?bar#baz");
 		assertThat(result2.toUri()).as("Invalid result URI").isEqualTo(expected);
 	}
 
 	@Test
-	void fromPath() throws URISyntaxException {
+	void fromPath() {
 		UriComponents result = UriComponentsBuilder.fromPath("foo").queryParam("bar").fragment("baz").build();
 
 		assertThat(result.getPath()).isEqualTo("foo");
@@ -125,19 +124,19 @@ class UriComponentsBuilderTests {
 		assertThat(result.getFragment()).isEqualTo("baz");
 		assertThat(result.toUriString()).as("Invalid result URI String").isEqualTo("foo?bar#baz");
 
-		URI expected = new URI("foo?bar#baz");
+		URI expected = URI.create("foo?bar#baz");
 		assertThat(result.toUri()).as("Invalid result URI").isEqualTo(expected);
 
 		result = UriComponentsBuilder.fromPath("/foo").build();
 		assertThat(result.getPath()).isEqualTo("/foo");
 
-		expected = new URI("/foo");
+		expected = URI.create("/foo");
 		assertThat(result.toUri()).as("Invalid result URI").isEqualTo(expected);
 	}
 
 	@Test
-	void fromHierarchicalUri() throws URISyntaxException {
-		URI uri = new URI("https://example.com/foo?bar#baz");
+	void fromHierarchicalUri() {
+		URI uri = URI.create("https://example.com/foo?bar#baz");
 		UriComponents result = UriComponentsBuilder.fromUri(uri).build();
 
 		assertThat(result.getScheme()).isEqualTo("https");
@@ -149,8 +148,8 @@ class UriComponentsBuilderTests {
 	}
 
 	@Test
-	void fromOpaqueUri() throws URISyntaxException {
-		URI uri = new URI("mailto:foo@bar.com#baz");
+	void fromOpaqueUri() {
+		URI uri = URI.create("mailto:foo@bar.com#baz");
 		UriComponents result = UriComponentsBuilder.fromUri(uri).build();
 
 		assertThat(result.getScheme()).isEqualTo("mailto");
@@ -160,8 +159,8 @@ class UriComponentsBuilderTests {
 	}
 
 	@Test  // SPR-9317
-	void fromUriEncodedQuery() throws URISyntaxException {
-		URI uri = new URI("https://www.example.org/?param=aGVsbG9Xb3JsZA%3D%3D");
+	void fromUriEncodedQuery() {
+		URI uri = URI.create("https://www.example.org/?param=aGVsbG9Xb3JsZA%3D%3D");
 		String fromUri = UriComponentsBuilder.fromUri(uri).build().getQueryParams().get("param").get(0);
 		String fromUriString = UriComponentsBuilder.fromUriString(uri.toString())
 				.build().getQueryParams().get("param").get(0);
@@ -967,8 +966,8 @@ class UriComponentsBuilderTests {
 	}
 
 	@Test  // gh-24444
-	void opaqueUriDoesNotResetOnNullInput() throws URISyntaxException {
-		URI uri = new URI("urn:ietf:wg:oauth:2.0:oob");
+	void opaqueUriDoesNotResetOnNullInput() {
+		URI uri = URI.create("urn:ietf:wg:oauth:2.0:oob");
 		UriComponents result = UriComponentsBuilder.fromUri(uri)
 				.host(null)
 				.port(-1)
diff --git a/spring-web/src/test/java/org/springframework/web/util/UriComponentsTests.java b/spring-web/src/test/java/org/springframework/web/util/UriComponentsTests.java
index 7bbb2c3429..2031684a4f 100644
--- a/spring-web/src/test/java/org/springframework/web/util/UriComponentsTests.java
+++ b/spring-web/src/test/java/org/springframework/web/util/UriComponentsTests.java
@@ -21,7 +21,6 @@ import java.io.ByteArrayOutputStream;
 import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
 import java.net.URI;
-import java.net.URISyntaxException;
 import java.util.Arrays;
 import java.util.Collections;
 
@@ -76,30 +75,30 @@ class UriComponentsTests {
 	}
 
 	@Test
-	void toUriEncoded() throws URISyntaxException {
+	void toUriEncoded() {
 		UriComponents uri = UriComponentsBuilder.fromUriString("https://example.com/hotel list/Z\u00fcrich").build();
-		assertThat(uri.encode().toUri()).isEqualTo(new URI("https://example.com/hotel%20list/Z%C3%BCrich"));
+		assertThat(uri.encode().toUri()).isEqualTo(URI.create("https://example.com/hotel%20list/Z%C3%BCrich"));
 	}
 
 	@Test
-	void toUriNotEncoded() throws URISyntaxException {
+	void toUriNotEncoded() {
 		UriComponents uri = UriComponentsBuilder.fromUriString("https://example.com/hotel list/Z\u00fcrich").build();
-		assertThat(uri.toUri()).isEqualTo(new URI("https://example.com/hotel%20list/Z\u00fcrich"));
+		assertThat(uri.toUri()).isEqualTo(URI.create("https://example.com/hotel%20list/Z\u00fcrich"));
 	}
 
 	@Test
-	void toUriAlreadyEncoded() throws URISyntaxException {
+	void toUriAlreadyEncoded() {
 		UriComponents uri = UriComponentsBuilder.fromUriString("https://example.com/hotel%20list/Z%C3%BCrich").build(true);
-		assertThat(uri.encode().toUri()).isEqualTo(new URI("https://example.com/hotel%20list/Z%C3%BCrich"));
+		assertThat(uri.encode().toUri()).isEqualTo(URI.create("https://example.com/hotel%20list/Z%C3%BCrich"));
 	}
 
 	@Test
-	void toUriWithIpv6HostAlreadyEncoded() throws URISyntaxException {
+	void toUriWithIpv6HostAlreadyEncoded() {
 		UriComponents uri = UriComponentsBuilder.fromUriString(
 				"http://[1abc:2abc:3abc::5ABC:6abc]:8080/hotel%20list/Z%C3%BCrich").build(true);
 
 		assertThat(uri.encode().toUri()).isEqualTo(
-				new URI("http://[1abc:2abc:3abc::5ABC:6abc]:8080/hotel%20list/Z%C3%BCrich"));
+				URI.create("http://[1abc:2abc:3abc::5ABC:6abc]:8080/hotel%20list/Z%C3%BCrich"));
 	}
 
 	@Test
diff --git a/spring-web/src/test/java/org/springframework/web/util/UriTemplateTests.java b/spring-web/src/test/java/org/springframework/web/util/UriTemplateTests.java
index 6405e5cabf..49044594fc 100644
--- a/spring-web/src/test/java/org/springframework/web/util/UriTemplateTests.java
+++ b/spring-web/src/test/java/org/springframework/web/util/UriTemplateTests.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2020 the original author or authors.
+ * Copyright 2002-2022 the original author or authors.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -33,73 +33,73 @@ import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException
  * @author Juergen Hoeller
  * @author Rossen Stoyanchev
  */
-public class UriTemplateTests {
+class UriTemplateTests {
 
 	@Test
-	public void getVariableNames() throws Exception {
+	void getVariableNames() {
 		UriTemplate template = new UriTemplate("/hotels/{hotel}/bookings/{booking}");
 		List variableNames = template.getVariableNames();
 		assertThat(variableNames).as("Invalid variable names").isEqualTo(Arrays.asList("hotel", "booking"));
 	}
 
 	@Test
-	public void expandVarArgs() throws Exception {
+	void expandVarArgs() {
 		UriTemplate template = new UriTemplate("/hotels/{hotel}/bookings/{booking}");
 		URI result = template.expand("1", "42");
-		assertThat(result).as("Invalid expanded template").isEqualTo(new URI("/hotels/1/bookings/42"));
+		assertThat(result).as("Invalid expanded template").isEqualTo(URI.create("/hotels/1/bookings/42"));
 	}
 
 	@Test  // SPR-9712
-	public void expandVarArgsWithArrayValue() throws Exception {
+	void expandVarArgsWithArrayValue() {
 		UriTemplate template = new UriTemplate("/sum?numbers={numbers}");
 		URI result = template.expand(new int[] {1, 2, 3});
-		assertThat(result).isEqualTo(new URI("/sum?numbers=1,2,3"));
+		assertThat(result).isEqualTo(URI.create("/sum?numbers=1,2,3"));
 	}
 
 	@Test
-	public void expandVarArgsNotEnoughVariables() throws Exception {
+	void expandVarArgsNotEnoughVariables() {
 		UriTemplate template = new UriTemplate("/hotels/{hotel}/bookings/{booking}");
 		assertThatIllegalArgumentException().isThrownBy(() -> template.expand("1"));
 	}
 
 	@Test
-	public void expandMap() throws Exception {
+	void expandMap() {
 		Map uriVariables = new HashMap<>(2);
 		uriVariables.put("booking", "42");
 		uriVariables.put("hotel", "1");
 		UriTemplate template = new UriTemplate("/hotels/{hotel}/bookings/{booking}");
 		URI result = template.expand(uriVariables);
-		assertThat(result).as("Invalid expanded template").isEqualTo(new URI("/hotels/1/bookings/42"));
+		assertThat(result).as("Invalid expanded template").isEqualTo(URI.create("/hotels/1/bookings/42"));
 	}
 
 	@Test
-	public void expandMapDuplicateVariables() throws Exception {
+	void expandMapDuplicateVariables() {
 		UriTemplate template = new UriTemplate("/order/{c}/{c}/{c}");
 		assertThat(template.getVariableNames()).isEqualTo(Arrays.asList("c", "c", "c"));
 		URI result = template.expand(Collections.singletonMap("c", "cheeseburger"));
-		assertThat(result).isEqualTo(new URI("/order/cheeseburger/cheeseburger/cheeseburger"));
+		assertThat(result).isEqualTo(URI.create("/order/cheeseburger/cheeseburger/cheeseburger"));
 	}
 
 	@Test
-	public void expandMapNonString() throws Exception {
+	void expandMapNonString() {
 		Map uriVariables = new HashMap<>(2);
 		uriVariables.put("booking", 42);
 		uriVariables.put("hotel", 1);
 		UriTemplate template = new UriTemplate("/hotels/{hotel}/bookings/{booking}");
 		URI result = template.expand(uriVariables);
-		assertThat(result).as("Invalid expanded template").isEqualTo(new URI("/hotels/1/bookings/42"));
+		assertThat(result).as("Invalid expanded template").isEqualTo(URI.create("/hotels/1/bookings/42"));
 	}
 
 	@Test
-	public void expandMapEncoded() throws Exception {
+	void expandMapEncoded() {
 		Map uriVariables = Collections.singletonMap("hotel", "Z\u00fcrich");
 		UriTemplate template = new UriTemplate("/hotel list/{hotel}");
 		URI result = template.expand(uriVariables);
-		assertThat(result).as("Invalid expanded template").isEqualTo(new URI("/hotel%20list/Z%C3%BCrich"));
+		assertThat(result).as("Invalid expanded template").isEqualTo(URI.create("/hotel%20list/Z%C3%BCrich"));
 	}
 
 	@Test
-	public void expandMapUnboundVariables() throws Exception {
+	void expandMapUnboundVariables() {
 		Map uriVariables = new HashMap<>(2);
 		uriVariables.put("booking", "42");
 		uriVariables.put("bar", "1");
@@ -109,14 +109,14 @@ public class UriTemplateTests {
 	}
 
 	@Test
-	public void expandEncoded() throws Exception {
+	void expandEncoded() {
 		UriTemplate template = new UriTemplate("/hotel list/{hotel}");
 		URI result = template.expand("Z\u00fcrich");
-		assertThat(result).as("Invalid expanded template").isEqualTo(new URI("/hotel%20list/Z%C3%BCrich"));
+		assertThat(result).as("Invalid expanded template").isEqualTo(URI.create("/hotel%20list/Z%C3%BCrich"));
 	}
 
 	@Test
-	public void matches() throws Exception {
+	void matches() {
 		UriTemplate template = new UriTemplate("/hotels/{hotel}/bookings/{booking}");
 		assertThat(template.matches("/hotels/1/bookings/42")).as("UriTemplate does not match").isTrue();
 		assertThat(template.matches("/hotels/bookings")).as("UriTemplate matches").isFalse();
@@ -125,14 +125,14 @@ public class UriTemplateTests {
 	}
 
 	@Test
-	public void matchesCustomRegex() throws Exception {
+	void matchesCustomRegex() {
 		UriTemplate template = new UriTemplate("/hotels/{hotel:\\d+}");
 		assertThat(template.matches("/hotels/42")).as("UriTemplate does not match").isTrue();
 		assertThat(template.matches("/hotels/foo")).as("UriTemplate matches").isFalse();
 	}
 
 	@Test
-	public void match() throws Exception {
+	void match() {
 		Map expected = new HashMap<>(2);
 		expected.put("booking", "42");
 		expected.put("hotel", "1");
@@ -143,7 +143,7 @@ public class UriTemplateTests {
 	}
 
 	@Test
-	public void matchCustomRegex() throws Exception {
+	void matchCustomRegex() {
 		Map expected = new HashMap<>(2);
 		expected.put("booking", "42");
 		expected.put("hotel", "1");
@@ -154,14 +154,14 @@ public class UriTemplateTests {
 	}
 
 	@Test  // SPR-13627
-	public void matchCustomRegexWithNestedCurlyBraces() throws Exception {
+	void matchCustomRegexWithNestedCurlyBraces() {
 		UriTemplate template = new UriTemplate("/site.{domain:co.[a-z]{2}}");
 		Map result = template.match("/site.co.eu");
 		assertThat(result).as("Invalid match").isEqualTo(Collections.singletonMap("domain", "co.eu"));
 	}
 
 	@Test
-	public void matchDuplicate() throws Exception {
+	void matchDuplicate() {
 		UriTemplate template = new UriTemplate("/order/{c}/{c}/{c}");
 		Map result = template.match("/order/cheeseburger/cheeseburger/cheeseburger");
 		Map expected = Collections.singletonMap("c", "cheeseburger");
@@ -169,7 +169,7 @@ public class UriTemplateTests {
 	}
 
 	@Test
-	public void matchMultipleInOneSegment() throws Exception {
+	void matchMultipleInOneSegment() {
 		UriTemplate template = new UriTemplate("/{foo}-{bar}");
 		Map result = template.match("/12-34");
 		Map expected = new HashMap<>(2);
@@ -179,19 +179,19 @@ public class UriTemplateTests {
 	}
 
 	@Test  // SPR-16169
-	public void matchWithMultipleSegmentsAtTheEnd() throws Exception {
+	void matchWithMultipleSegmentsAtTheEnd() {
 		UriTemplate template = new UriTemplate("/account/{accountId}");
 		assertThat(template.matches("/account/15/alias/5")).isFalse();
 	}
 
 	@Test
-	public void queryVariables() throws Exception {
+	void queryVariables() {
 		UriTemplate template = new UriTemplate("/search?q={query}");
 		assertThat(template.matches("/search?q=foo")).isTrue();
 	}
 
 	@Test
-	public void fragments() throws Exception {
+	void fragments() {
 		UriTemplate template = new UriTemplate("/search#{fragment}");
 		assertThat(template.matches("/search#foo")).isTrue();
 
@@ -200,19 +200,19 @@ public class UriTemplateTests {
 	}
 
 	@Test  // SPR-13705
-	public void matchesWithSlashAtTheEnd() throws Exception {
+	void matchesWithSlashAtTheEnd() {
 		assertThat(new UriTemplate("/test/").matches("/test/")).isTrue();
 	}
 
 	@Test
-	public void expandWithDollar() throws Exception {
+	void expandWithDollar() {
 		UriTemplate template = new UriTemplate("/{a}");
 		URI uri = template.expand("$replacement");
 		assertThat(uri.toString()).isEqualTo("/$replacement");
 	}
 
 	@Test
-	public void expandWithAtSign() throws Exception {
+	void expandWithAtSign() {
 		UriTemplate template = new UriTemplate("http://localhost/query={query}");
 		URI uri = template.expand("foo@bar");
 		assertThat(uri.toString()).isEqualTo("http://localhost/query=foo@bar");
diff --git a/spring-web/src/testFixtures/java/org/springframework/web/testfixture/http/client/MockClientHttpRequest.java b/spring-web/src/testFixtures/java/org/springframework/web/testfixture/http/client/MockClientHttpRequest.java
index d6989daa8e..1ff44775cb 100644
--- a/spring-web/src/testFixtures/java/org/springframework/web/testfixture/http/client/MockClientHttpRequest.java
+++ b/spring-web/src/testFixtures/java/org/springframework/web/testfixture/http/client/MockClientHttpRequest.java
@@ -20,7 +20,6 @@ import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.OutputStream;
 import java.net.URI;
-import java.net.URISyntaxException;
 import java.nio.charset.Charset;
 import java.nio.charset.StandardCharsets;
 
@@ -59,12 +58,7 @@ public class MockClientHttpRequest implements ClientHttpRequest {
 
 	public MockClientHttpRequest() {
 		this.httpMethod = HttpMethod.GET;
-		try {
-			this.uri = new URI("/");
-		}
-		catch (URISyntaxException ex) {
-			throw new IllegalStateException(ex);
-		}
+		this.uri = URI.create("/");
 	}
 
 	public MockClientHttpRequest(HttpMethod httpMethod, String urlTemplate, Object... vars) {