diff --git a/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/WireMockRestServiceServer.java b/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/WireMockRestServiceServer.java index 5a7ab3219c..e56cfb481f 100644 --- a/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/WireMockRestServiceServer.java +++ b/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/WireMockRestServiceServer.java @@ -277,7 +277,7 @@ public final class WireMockRestServiceServer { if (indexOfBaseUrl == -1) { return url; } - return url.substring(indexOfBaseUrl + this.baseUrl.length() + 1); + return url.substring(indexOfBaseUrl + this.baseUrl.length()); } private Matcher requestMatcher(RequestPattern request) { diff --git a/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/WiremockMockServerApplicationTests.java b/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/WiremockMockServerApplicationTests.java index 19902f659b..0acb663193 100644 --- a/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/WiremockMockServerApplicationTests.java +++ b/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/WiremockMockServerApplicationTests.java @@ -411,6 +411,24 @@ public class WiremockMockServerApplicationTests { server.verify(); } + @Test + public void getWithSimpleUrlPathMatchingWithTrailingSlashInBaseUrl() throws Exception { + MockRestServiceServer server = WireMockRestServiceServer.with(this.restTemplate).baseUrl("https://example.org/") + .stubs("classpath:/mappings/url-simple-path-pattern-without-leading-slash.json").build(); + assertThat(this.restTemplate.getForObject("https://example.org/my/api", String.class)) + .isEqualTo("Hello Url Path Matcher"); + server.verify(); + } + + @Test + public void getWithSimpleUrlPathMatchingWithLeadingSlashInPattern() throws Exception { + MockRestServiceServer server = WireMockRestServiceServer.with(this.restTemplate).baseUrl("https://example.org") + .stubs("classpath:/mappings/url-simple-path-pattern-with-leading-slash.json").build(); + assertThat(this.restTemplate.getForObject("https://example.org/my/api", String.class)) + .isEqualTo("Hello Url Path Matcher"); + server.verify(); + } + @Test public void getWithUrlMatching() throws Exception { MockRestServiceServer server = WireMockRestServiceServer.with(this.restTemplate) // diff --git a/spring-cloud-contract-wiremock/src/test/resources/mappings/url-path-pattern.json b/spring-cloud-contract-wiremock/src/test/resources/mappings/url-path-pattern.json index 58f58debed..26fccb5a45 100644 --- a/spring-cloud-contract-wiremock/src/test/resources/mappings/url-path-pattern.json +++ b/spring-cloud-contract-wiremock/src/test/resources/mappings/url-path-pattern.json @@ -1,7 +1,7 @@ { "request": { "method": "GET", - "urlPathPattern": "([a-zA-Z0-9/-]*)/url-path-pattern/" + "urlPathPattern": "/([0-9]+)/url-path-pattern/" }, "response": { "status": 200, diff --git a/spring-cloud-contract-wiremock/src/test/resources/mappings/url-simple-path-pattern-with-leading-slash.json b/spring-cloud-contract-wiremock/src/test/resources/mappings/url-simple-path-pattern-with-leading-slash.json new file mode 100644 index 0000000000..ce37ae8b9f --- /dev/null +++ b/spring-cloud-contract-wiremock/src/test/resources/mappings/url-simple-path-pattern-with-leading-slash.json @@ -0,0 +1,10 @@ +{ + "request": { + "method": "GET", + "urlPathPattern": "/my/api" + }, + "response": { + "status": 200, + "body": "Hello Url Path Matcher" + } +} diff --git a/spring-cloud-contract-wiremock/src/test/resources/mappings/url-simple-path-pattern-without-leading-slash.json b/spring-cloud-contract-wiremock/src/test/resources/mappings/url-simple-path-pattern-without-leading-slash.json new file mode 100644 index 0000000000..db22373c33 --- /dev/null +++ b/spring-cloud-contract-wiremock/src/test/resources/mappings/url-simple-path-pattern-without-leading-slash.json @@ -0,0 +1,10 @@ +{ + "request": { + "method": "GET", + "urlPathPattern": "my/api" + }, + "response": { + "status": 200, + "body": "Hello Url Path Matcher" + } +}