diff --git a/spring-test/src/main/java/org/springframework/test/web/client/match/MockRestRequestMatchers.java b/spring-test/src/main/java/org/springframework/test/web/client/match/MockRestRequestMatchers.java index 48ff16d7e3a..d67c6762dd9 100644 --- a/spring-test/src/main/java/org/springframework/test/web/client/match/MockRestRequestMatchers.java +++ b/spring-test/src/main/java/org/springframework/test/web/client/match/MockRestRequestMatchers.java @@ -31,9 +31,10 @@ import org.springframework.util.Assert; import org.springframework.util.MultiValueMap; import org.springframework.web.util.UriComponentsBuilder; -import static org.hamcrest.MatcherAssert.*; +import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.Assert.assertNotNull; -import static org.springframework.test.util.AssertionErrors.*; +import static org.springframework.test.util.AssertionErrors.assertEquals; +import static org.springframework.test.util.AssertionErrors.assertTrue; /** * Static factory methods for {@link RequestMatcher} classes. Typically used to @@ -77,7 +78,7 @@ public abstract class MockRestRequestMatchers { } /** - * Assert the request URI string. + * Assert the request URI matches the given string. * @param expectedUri the expected URI * @return the request matcher */ @@ -86,6 +87,20 @@ public abstract class MockRestRequestMatchers { return request -> assertEquals("Request URI", expectedUri, request.getURI().toString()); } + /** + * Variant of {@link #requestTo(URI)} that prepares the URI from a URI + * template plus optional variables via {@link UriComponentsBuilder} + * including encoding. + * @param expectedUri the expected URI template + * @param uriVars zero or more URI variables to populate the expected URI + * @return the request matcher + */ + public static RequestMatcher requestToUriTemplate(final String expectedUri, final Object... uriVars) { + Assert.notNull(expectedUri, "'uri' must not be null"); + URI uri = UriComponentsBuilder.fromUriString(expectedUri).buildAndExpand(uriVars).encode().toUri(); + return requestTo(uri); + } + /** * Expect a request to the given URI. * @param uri the expected URI diff --git a/spring-test/src/test/java/org/springframework/test/web/client/match/MockRestRequestMatchersTests.java b/spring-test/src/test/java/org/springframework/test/web/client/match/MockRestRequestMatchersTests.java index da8360146f9..c2d7f9c6808 100644 --- a/spring-test/src/test/java/org/springframework/test/web/client/match/MockRestRequestMatchersTests.java +++ b/spring-test/src/test/java/org/springframework/test/web/client/match/MockRestRequestMatchersTests.java @@ -45,6 +45,13 @@ public class MockRestRequestMatchersTests { MockRestRequestMatchers.requestTo("http://foo.com/bar").match(this.request); } + @Test // SPR-15819 + public void requestToUriTemplate() throws Exception { + this.request.setURI(new URI("http://foo.com/bar")); + + MockRestRequestMatchers.requestToUriTemplate("http://foo.com/{bar}", "bar").match(this.request); + } + @Test(expected = AssertionError.class) public void requestToNoMatch() throws Exception { this.request.setURI(new URI("http://foo.com/bar"));