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 08507355a9..5a7ab3219c 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 @@ -323,9 +323,9 @@ public final class WireMockRestServiceServer { .contentType(contentType(response)).headers(responseHeaders(response)); } - private String body(ResponseDefinition response) { - if (response.getBody() != null) { - return response.getBody(); + private byte[] body(ResponseDefinition response) { + if (response.getByteBody() != null) { + return response.getByteBody(); } String file = response.getBodyFileName(); if (file != null) { @@ -340,8 +340,7 @@ public final class WireMockRestServiceServer { try { Resource resource = files.createRelative(file); if (resource.exists()) { - return StreamUtils.copyToString(resource.getInputStream(), - Charset.forName("UTF-8")); + return StreamUtils.copyToByteArray(resource.getInputStream()); } } catch (IOException e) { @@ -355,7 +354,7 @@ public final class WireMockRestServiceServer { } } } - return ""; + return new byte[0]; } private void requestHeaders(ResponseActions expect, 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 e7c6dc1f07..a75c900ffd 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 @@ -75,6 +75,30 @@ public class WiremockMockServerApplicationTests { server.verify(); } + @Test + public void simpleGetWithJsonBody() throws Exception { + MockRestServiceServer server = WireMockRestServiceServer.with(this.restTemplate) + .baseUrl("https://example.org") + .stubs("classpath:/mappings/resource-with-json-body.json").build(); + + String response = this.restTemplate.getForObject("https://example.org/resource", String.class); + + assertThat(response).isEqualToIgnoringWhitespace("{\"message\":\"Hello World\"}"); + server.verify(); + } + + @Test + public void simpleGetWithBase64Body() throws Exception { + MockRestServiceServer server = WireMockRestServiceServer.with(this.restTemplate) + .baseUrl("https://example.org") + .stubs("classpath:/mappings/resource-with-base64-body.json").build(); + + String response = this.restTemplate.getForObject("https://example.org/resource", String.class); + + assertThat(response).isEqualToIgnoringWhitespace("Hello World"); + server.verify(); + } + @Test public void simpleGetWithBodyFileCustomLocation() throws Exception { MockRestServiceServer server = WireMockRestServiceServer.with(this.restTemplate) // diff --git a/spring-cloud-contract-wiremock/src/test/resources/mappings/resource-with-base64-body.json b/spring-cloud-contract-wiremock/src/test/resources/mappings/resource-with-base64-body.json new file mode 100644 index 0000000000..779883bdef --- /dev/null +++ b/spring-cloud-contract-wiremock/src/test/resources/mappings/resource-with-base64-body.json @@ -0,0 +1,11 @@ +{ + "priority": 100, + "request": { + "urlPath": "/resource", + "method": "GET" + }, + "response": { + "status": 200, + "base64Body": "SGVsbG8gV29ybGQ=" + } +} diff --git a/spring-cloud-contract-wiremock/src/test/resources/mappings/resource-with-json-body.json b/spring-cloud-contract-wiremock/src/test/resources/mappings/resource-with-json-body.json new file mode 100644 index 0000000000..d404db1207 --- /dev/null +++ b/spring-cloud-contract-wiremock/src/test/resources/mappings/resource-with-json-body.json @@ -0,0 +1,13 @@ +{ + "priority": 100, + "request": { + "urlPath": "/resource", + "method": "GET" + }, + "response": { + "status": 200, + "jsonBody": { + "message": "Hello World" + } + } +}