diff --git a/spring-restdocs-core/src/main/java/org/springframework/restdocs/http/HttpRequestSnippet.java b/spring-restdocs-core/src/main/java/org/springframework/restdocs/http/HttpRequestSnippet.java index 8f57ae5a..59d75af1 100644 --- a/spring-restdocs-core/src/main/java/org/springframework/restdocs/http/HttpRequestSnippet.java +++ b/spring-restdocs-core/src/main/java/org/springframework/restdocs/http/HttpRequestSnippet.java @@ -134,7 +134,7 @@ public class HttpRequestSnippet extends TemplatedSnippet { } else if (isPutOrPost(request)) { if (request.getParts().isEmpty()) { - String queryString = request.getParameters().toQueryString(); + String queryString = request.getParameters().getUniqueParameters(request.getUri()).toQueryString(); if (StringUtils.hasText(queryString)) { writer.println(); writer.print(queryString); @@ -206,7 +206,8 @@ public class HttpRequestSnippet extends TemplatedSnippet { private boolean requiresFormEncodingContentTypeHeader(OperationRequest request) { return request.getHeaders().get(HttpHeaders.CONTENT_TYPE) == null && isPutOrPost(request) - && (!request.getParameters().isEmpty() && !includeParametersInUri(request)); + && !request.getParameters().getUniqueParameters(request.getUri()).isEmpty() + && !includeParametersInUri(request); } private Map header(String name, String value) { diff --git a/spring-restdocs-core/src/test/java/org/springframework/restdocs/http/HttpRequestSnippetTests.java b/spring-restdocs-core/src/test/java/org/springframework/restdocs/http/HttpRequestSnippetTests.java index cffc0eb9..4bdb908d 100644 --- a/spring-restdocs-core/src/test/java/org/springframework/restdocs/http/HttpRequestSnippetTests.java +++ b/spring-restdocs-core/src/test/java/org/springframework/restdocs/http/HttpRequestSnippetTests.java @@ -224,6 +224,14 @@ public class HttpRequestSnippetTests extends AbstractSnippetTests { .header("Content-Type", "application/x-www-form-urlencoded").content("b%26r=baz&a=alpha")); } + @Test + public void putRequestWithTotallyOverlappingQueryStringAndParameters() throws IOException { + new HttpRequestSnippet().document(this.operationBuilder.request("http://localhost/foo?a=alpha&b=bravo") + .method("PUT").param("a", "alpha").param("b", "bravo").build()); + assertThat(this.generatedSnippets.httpRequest()) + .is(httpRequest(RequestMethod.PUT, "/foo?a=alpha&b=bravo").header(HttpHeaders.HOST, "localhost")); + } + @Test public void multipartPost() throws IOException { new HttpRequestSnippet().document(this.operationBuilder.request("http://localhost/upload").method("POST")