Make URI template variables nullable
Closes gh-34221
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2023 the original author or authors.
|
||||
* Copyright 2002-2025 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.
|
||||
@@ -119,7 +119,7 @@ public final class MockServerHttpRequest extends AbstractServerHttpRequest {
|
||||
* @param uriVars zero or more URI variables
|
||||
* @return the created builder
|
||||
*/
|
||||
public static BaseBuilder<?> get(String urlTemplate, Object... uriVars) {
|
||||
public static BaseBuilder<?> get(String urlTemplate, @Nullable Object... uriVars) {
|
||||
return method(HttpMethod.GET, urlTemplate, uriVars);
|
||||
}
|
||||
|
||||
@@ -129,7 +129,7 @@ public final class MockServerHttpRequest extends AbstractServerHttpRequest {
|
||||
* @param uriVars zero or more URI variables
|
||||
* @return the created builder
|
||||
*/
|
||||
public static BaseBuilder<?> head(String urlTemplate, Object... uriVars) {
|
||||
public static BaseBuilder<?> head(String urlTemplate, @Nullable Object... uriVars) {
|
||||
return method(HttpMethod.HEAD, urlTemplate, uriVars);
|
||||
}
|
||||
|
||||
@@ -139,7 +139,7 @@ public final class MockServerHttpRequest extends AbstractServerHttpRequest {
|
||||
* @param uriVars zero or more URI variables
|
||||
* @return the created builder
|
||||
*/
|
||||
public static BodyBuilder post(String urlTemplate, Object... uriVars) {
|
||||
public static BodyBuilder post(String urlTemplate, @Nullable Object... uriVars) {
|
||||
return method(HttpMethod.POST, urlTemplate, uriVars);
|
||||
}
|
||||
|
||||
@@ -150,7 +150,7 @@ public final class MockServerHttpRequest extends AbstractServerHttpRequest {
|
||||
* @param uriVars zero or more URI variables
|
||||
* @return the created builder
|
||||
*/
|
||||
public static BodyBuilder put(String urlTemplate, Object... uriVars) {
|
||||
public static BodyBuilder put(String urlTemplate, @Nullable Object... uriVars) {
|
||||
return method(HttpMethod.PUT, urlTemplate, uriVars);
|
||||
}
|
||||
|
||||
@@ -160,7 +160,7 @@ public final class MockServerHttpRequest extends AbstractServerHttpRequest {
|
||||
* @param uriVars zero or more URI variables
|
||||
* @return the created builder
|
||||
*/
|
||||
public static BodyBuilder patch(String urlTemplate, Object... uriVars) {
|
||||
public static BodyBuilder patch(String urlTemplate, @Nullable Object... uriVars) {
|
||||
return method(HttpMethod.PATCH, urlTemplate, uriVars);
|
||||
}
|
||||
|
||||
@@ -170,7 +170,7 @@ public final class MockServerHttpRequest extends AbstractServerHttpRequest {
|
||||
* @param uriVars zero or more URI variables
|
||||
* @return the created builder
|
||||
*/
|
||||
public static BaseBuilder<?> delete(String urlTemplate, Object... uriVars) {
|
||||
public static BaseBuilder<?> delete(String urlTemplate, @Nullable Object... uriVars) {
|
||||
return method(HttpMethod.DELETE, urlTemplate, uriVars);
|
||||
}
|
||||
|
||||
@@ -180,7 +180,7 @@ public final class MockServerHttpRequest extends AbstractServerHttpRequest {
|
||||
* @param uriVars zero or more URI variables
|
||||
* @return the created builder
|
||||
*/
|
||||
public static BaseBuilder<?> options(String urlTemplate, Object... uriVars) {
|
||||
public static BaseBuilder<?> options(String urlTemplate, @Nullable Object... uriVars) {
|
||||
return method(HttpMethod.OPTIONS, urlTemplate, uriVars);
|
||||
}
|
||||
|
||||
@@ -205,7 +205,7 @@ public final class MockServerHttpRequest extends AbstractServerHttpRequest {
|
||||
* @param vars variables to expand into the template
|
||||
* @return the created builder
|
||||
*/
|
||||
public static BodyBuilder method(HttpMethod method, String uri, Object... vars) {
|
||||
public static BodyBuilder method(HttpMethod method, String uri, @Nullable Object... vars) {
|
||||
return method(method, toUri(uri, vars));
|
||||
}
|
||||
|
||||
@@ -220,12 +220,12 @@ public final class MockServerHttpRequest extends AbstractServerHttpRequest {
|
||||
* @deprecated as of Spring Framework 6.0 in favor of {@link #method(HttpMethod, String, Object...)}
|
||||
*/
|
||||
@Deprecated(since = "6.0")
|
||||
public static BodyBuilder method(String httpMethod, String uri, Object... vars) {
|
||||
public static BodyBuilder method(String httpMethod, String uri, @Nullable Object... vars) {
|
||||
Assert.hasText(httpMethod, "HTTP method is required.");
|
||||
return new DefaultBodyBuilder(HttpMethod.valueOf(httpMethod), toUri(uri, vars));
|
||||
}
|
||||
|
||||
private static URI toUri(String uri, Object[] vars) {
|
||||
private static URI toUri(String uri, @Nullable Object[] vars) {
|
||||
return UriComponentsBuilder.fromUriString(uri).buildAndExpand(vars).encode().toUri();
|
||||
}
|
||||
|
||||
|
||||
@@ -56,7 +56,7 @@ public class UriAssert extends AbstractStringAssert<UriAssert> {
|
||||
* @param uriVars the values to replace the URI template variables
|
||||
* @see UriComponentsBuilder#buildAndExpand(Object...)
|
||||
*/
|
||||
public UriAssert isEqualToTemplate(String uriTemplate, Object... uriVars) {
|
||||
public UriAssert isEqualToTemplate(String uriTemplate, @Nullable Object... uriVars) {
|
||||
String uri = buildUri(uriTemplate, uriVars);
|
||||
return isEqualTo(uri);
|
||||
}
|
||||
@@ -81,7 +81,7 @@ public class UriAssert extends AbstractStringAssert<UriAssert> {
|
||||
}
|
||||
|
||||
|
||||
private String buildUri(String uriTemplate, Object... uriVars) {
|
||||
private String buildUri(String uriTemplate, @Nullable Object... uriVars) {
|
||||
try {
|
||||
return UriComponentsBuilder.fromUriString(uriTemplate)
|
||||
.buildAndExpand(uriVars).encode().toUriString();
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2023 the original author or authors.
|
||||
* Copyright 2002-2025 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.
|
||||
@@ -23,6 +23,7 @@ import java.util.Map;
|
||||
import javax.xml.xpath.XPathExpressionException;
|
||||
|
||||
import org.hamcrest.Matcher;
|
||||
import org.jspecify.annotations.Nullable;
|
||||
|
||||
import org.springframework.http.HttpHeaders;
|
||||
import org.springframework.http.HttpMethod;
|
||||
@@ -98,7 +99,7 @@ public abstract class MockRestRequestMatchers {
|
||||
* @param uriVars zero or more URI variables to populate the expected URI
|
||||
* @return the request matcher
|
||||
*/
|
||||
public static RequestMatcher requestToUriTemplate(String expectedUri, Object... uriVars) {
|
||||
public static RequestMatcher requestToUriTemplate(String expectedUri, @Nullable Object... uriVars) {
|
||||
Assert.notNull(expectedUri, "'uri' must not be null");
|
||||
URI uri = UriComponentsBuilder.fromUriString(expectedUri).buildAndExpand(uriVars).encode().toUri();
|
||||
return requestTo(uri);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2024 the original author or authors.
|
||||
* Copyright 2002-2025 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.
|
||||
@@ -202,13 +202,13 @@ class DefaultWebTestClient implements WebTestClient {
|
||||
}
|
||||
|
||||
@Override
|
||||
public RequestBodySpec uri(String uriTemplate, Object... uriVariables) {
|
||||
public RequestBodySpec uri(String uriTemplate, @Nullable Object... uriVariables) {
|
||||
this.uriTemplate = uriTemplate;
|
||||
return uri(DefaultWebTestClient.this.uriBuilderFactory.expand(uriTemplate, uriVariables));
|
||||
}
|
||||
|
||||
@Override
|
||||
public RequestBodySpec uri(String uriTemplate, Map<String, ?> uriVariables) {
|
||||
public RequestBodySpec uri(String uriTemplate, Map<String, ? extends @Nullable Object> uriVariables) {
|
||||
this.uriTemplate = uriTemplate;
|
||||
return uri(DefaultWebTestClient.this.uriBuilderFactory.expand(uriTemplate, uriVariables));
|
||||
}
|
||||
|
||||
@@ -557,7 +557,7 @@ public interface WebTestClient {
|
||||
* with a base URI) it will be used to expand the URI template.
|
||||
* @return spec to add headers or perform the exchange
|
||||
*/
|
||||
S uri(String uri, Object... uriVariables);
|
||||
S uri(String uri, @Nullable Object... uriVariables);
|
||||
|
||||
/**
|
||||
* Specify the URI for the request using a URI template and URI variables.
|
||||
@@ -565,7 +565,7 @@ public interface WebTestClient {
|
||||
* with a base URI) it will be used to expand the URI template.
|
||||
* @return spec to add headers or perform the exchange
|
||||
*/
|
||||
S uri(String uri, Map<String, ?> uriVariables);
|
||||
S uri(String uri, Map<String, ? extends @Nullable Object> uriVariables);
|
||||
|
||||
/**
|
||||
* Build the URI for the request with a {@link UriBuilder} obtained
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2024 the original author or authors.
|
||||
* Copyright 2002-2025 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.
|
||||
@@ -151,7 +151,7 @@ public abstract class AbstractMockHttpServletRequestBuilder<B extends AbstractMo
|
||||
/**
|
||||
* Specify the URI for the request using a URI template and URI variables.
|
||||
*/
|
||||
public B uri(String uriTemplate, Object... uriVariables) {
|
||||
public B uri(String uriTemplate, @Nullable Object... uriVariables) {
|
||||
return updateUri(initUri(uriTemplate, uriVariables), uriTemplate);
|
||||
}
|
||||
|
||||
@@ -161,7 +161,7 @@ public abstract class AbstractMockHttpServletRequestBuilder<B extends AbstractMo
|
||||
return self();
|
||||
}
|
||||
|
||||
private static URI initUri(String uri, Object[] vars) {
|
||||
private static URI initUri(String uri, @Nullable Object[] vars) {
|
||||
Assert.notNull(uri, "'uri' must not be null");
|
||||
Assert.isTrue(uri.isEmpty() || uri.startsWith("/") || uri.startsWith("http://") || uri.startsWith("https://"),
|
||||
() -> "'uri' should start with a path or be a complete HTTP URI: " + uri);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2024 the original author or authors.
|
||||
* Copyright 2002-2025 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.
|
||||
@@ -75,7 +75,7 @@ public class MockHttpServletRequestBuilder
|
||||
}
|
||||
|
||||
@Override
|
||||
public MockHttpServletRequestBuilder uri(String uriTemplate, Object... uriVariables) {
|
||||
public MockHttpServletRequestBuilder uri(String uriTemplate, @Nullable Object... uriVariables) {
|
||||
return super.uri(uriTemplate, uriVariables);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2024 the original author or authors.
|
||||
* Copyright 2002-2025 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.
|
||||
@@ -19,6 +19,7 @@ package org.springframework.test.web.servlet.request;
|
||||
import java.net.URI;
|
||||
|
||||
import jakarta.servlet.DispatcherType;
|
||||
import org.jspecify.annotations.Nullable;
|
||||
|
||||
import org.springframework.http.HttpMethod;
|
||||
import org.springframework.mock.web.MockHttpServletRequest;
|
||||
@@ -52,7 +53,7 @@ public abstract class MockMvcRequestBuilders {
|
||||
* @param uriTemplate a URI template; the resulting URI will be encoded
|
||||
* @param uriVariables zero or more URI variables
|
||||
*/
|
||||
public static MockHttpServletRequestBuilder get(String uriTemplate, Object... uriVariables) {
|
||||
public static MockHttpServletRequestBuilder get(String uriTemplate, @Nullable Object... uriVariables) {
|
||||
return new MockHttpServletRequestBuilder(HttpMethod.GET).uri(uriTemplate, uriVariables);
|
||||
}
|
||||
|
||||
@@ -70,7 +71,7 @@ public abstract class MockMvcRequestBuilders {
|
||||
* @param uriTemplate a URI template; the resulting URI will be encoded
|
||||
* @param uriVariables zero or more URI variables
|
||||
*/
|
||||
public static MockHttpServletRequestBuilder post(String uriTemplate, Object... uriVariables) {
|
||||
public static MockHttpServletRequestBuilder post(String uriTemplate, @Nullable Object... uriVariables) {
|
||||
return new MockHttpServletRequestBuilder(HttpMethod.POST).uri(uriTemplate, uriVariables);
|
||||
}
|
||||
|
||||
@@ -88,7 +89,7 @@ public abstract class MockMvcRequestBuilders {
|
||||
* @param uriTemplate a URI template; the resulting URI will be encoded
|
||||
* @param uriVariables zero or more URI variables
|
||||
*/
|
||||
public static MockHttpServletRequestBuilder put(String uriTemplate, Object... uriVariables) {
|
||||
public static MockHttpServletRequestBuilder put(String uriTemplate, @Nullable Object... uriVariables) {
|
||||
return new MockHttpServletRequestBuilder(HttpMethod.PUT).uri(uriTemplate, uriVariables);
|
||||
}
|
||||
|
||||
@@ -106,7 +107,7 @@ public abstract class MockMvcRequestBuilders {
|
||||
* @param uriTemplate a URI template; the resulting URI will be encoded
|
||||
* @param uriVariables zero or more URI variables
|
||||
*/
|
||||
public static MockHttpServletRequestBuilder patch(String uriTemplate, Object... uriVariables) {
|
||||
public static MockHttpServletRequestBuilder patch(String uriTemplate,@Nullable Object... uriVariables) {
|
||||
return new MockHttpServletRequestBuilder(HttpMethod.PATCH).uri(uriTemplate, uriVariables);
|
||||
}
|
||||
|
||||
@@ -124,7 +125,7 @@ public abstract class MockMvcRequestBuilders {
|
||||
* @param uriTemplate a URI template; the resulting URI will be encoded
|
||||
* @param uriVariables zero or more URI variables
|
||||
*/
|
||||
public static MockHttpServletRequestBuilder delete(String uriTemplate, Object... uriVariables) {
|
||||
public static MockHttpServletRequestBuilder delete(String uriTemplate, @Nullable Object... uriVariables) {
|
||||
return new MockHttpServletRequestBuilder(HttpMethod.DELETE).uri(uriTemplate, uriVariables);
|
||||
}
|
||||
|
||||
@@ -142,7 +143,7 @@ public abstract class MockMvcRequestBuilders {
|
||||
* @param uriTemplate a URI template; the resulting URI will be encoded
|
||||
* @param uriVariables zero or more URI variables
|
||||
*/
|
||||
public static MockHttpServletRequestBuilder options(String uriTemplate, Object... uriVariables) {
|
||||
public static MockHttpServletRequestBuilder options(String uriTemplate, @Nullable Object... uriVariables) {
|
||||
return new MockHttpServletRequestBuilder(HttpMethod.OPTIONS).uri(uriTemplate, uriVariables);
|
||||
}
|
||||
|
||||
@@ -161,7 +162,7 @@ public abstract class MockMvcRequestBuilders {
|
||||
* @param uriVariables zero or more URI variables
|
||||
* @since 4.1
|
||||
*/
|
||||
public static MockHttpServletRequestBuilder head(String uriTemplate, Object... uriVariables) {
|
||||
public static MockHttpServletRequestBuilder head(String uriTemplate, @Nullable Object... uriVariables) {
|
||||
return new MockHttpServletRequestBuilder(HttpMethod.HEAD).uri(uriTemplate, uriVariables);
|
||||
}
|
||||
|
||||
@@ -180,7 +181,7 @@ public abstract class MockMvcRequestBuilders {
|
||||
* @param uriTemplate a URI template; the resulting URI will be encoded
|
||||
* @param uriVariables zero or more URI variables
|
||||
*/
|
||||
public static MockHttpServletRequestBuilder request(HttpMethod method, String uriTemplate, Object... uriVariables) {
|
||||
public static MockHttpServletRequestBuilder request(HttpMethod method, String uriTemplate, @Nullable Object... uriVariables) {
|
||||
return new MockHttpServletRequestBuilder(method).uri(uriTemplate, uriVariables);
|
||||
}
|
||||
|
||||
@@ -213,7 +214,7 @@ public abstract class MockMvcRequestBuilders {
|
||||
* @param uriVariables zero or more URI variables
|
||||
* @since 5.0
|
||||
*/
|
||||
public static MockMultipartHttpServletRequestBuilder multipart(String uriTemplate, Object... uriVariables) {
|
||||
public static MockMultipartHttpServletRequestBuilder multipart(String uriTemplate, @Nullable Object... uriVariables) {
|
||||
MockMultipartHttpServletRequestBuilder builder = new MockMultipartHttpServletRequestBuilder();
|
||||
builder.uri(uriTemplate, uriVariables);
|
||||
return builder;
|
||||
@@ -227,7 +228,7 @@ public abstract class MockMvcRequestBuilders {
|
||||
* @param uriVariables zero or more URI variables
|
||||
* @since 5.3.22
|
||||
*/
|
||||
public static MockMultipartHttpServletRequestBuilder multipart(HttpMethod httpMethod, String uriTemplate, Object... uriVariables) {
|
||||
public static MockMultipartHttpServletRequestBuilder multipart(HttpMethod httpMethod, String uriTemplate, @Nullable Object... uriVariables) {
|
||||
MockMultipartHttpServletRequestBuilder builder = new MockMultipartHttpServletRequestBuilder(httpMethod);
|
||||
builder.uri(uriTemplate, uriVariables);
|
||||
return builder;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2020 the original author or authors.
|
||||
* Copyright 2002-2025 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.
|
||||
@@ -98,7 +98,7 @@ public abstract class MockMvcResultMatchers {
|
||||
* @param uriVars zero or more URI variables to populate the template
|
||||
* @see UriComponentsBuilder#fromUriString(String)
|
||||
*/
|
||||
public static ResultMatcher forwardedUrlTemplate(String urlTemplate, Object... uriVars) {
|
||||
public static ResultMatcher forwardedUrlTemplate(String urlTemplate, @Nullable Object... uriVars) {
|
||||
String uri = UriComponentsBuilder.fromUriString(urlTemplate).buildAndExpand(uriVars).encode().toUriString();
|
||||
return forwardedUrl(uri);
|
||||
}
|
||||
@@ -137,7 +137,7 @@ public abstract class MockMvcResultMatchers {
|
||||
* @param uriVars zero or more URI variables to populate the template
|
||||
* @see UriComponentsBuilder#fromUriString(String)
|
||||
*/
|
||||
public static ResultMatcher redirectedUrlTemplate(String urlTemplate, Object... uriVars) {
|
||||
public static ResultMatcher redirectedUrlTemplate(String urlTemplate, @Nullable Object... uriVars) {
|
||||
String uri = UriComponentsBuilder.fromUriString(urlTemplate).buildAndExpand(uriVars).encode().toUriString();
|
||||
return redirectedUrl(uri);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user