Skip to content

Commit d4d83f2

Browse files
committed
Fix HTTP request snippet's handling of query strings and params
Closes gh-763
1 parent 90e0721 commit d4d83f2

File tree

2 files changed

+11
-2
lines changed

2 files changed

+11
-2
lines changed

spring-restdocs-core/src/main/java/org/springframework/restdocs/http/HttpRequestSnippet.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ private String getRequestBody(OperationRequest request) {
134134
}
135135
else if (isPutOrPost(request)) {
136136
if (request.getParts().isEmpty()) {
137-
String queryString = request.getParameters().toQueryString();
137+
String queryString = request.getParameters().getUniqueParameters(request.getUri()).toQueryString();
138138
if (StringUtils.hasText(queryString)) {
139139
writer.println();
140140
writer.print(queryString);
@@ -206,7 +206,8 @@ private void writeMultipartEnd(PrintWriter writer) {
206206

207207
private boolean requiresFormEncodingContentTypeHeader(OperationRequest request) {
208208
return request.getHeaders().get(HttpHeaders.CONTENT_TYPE) == null && isPutOrPost(request)
209-
&& (!request.getParameters().isEmpty() && !includeParametersInUri(request));
209+
&& !request.getParameters().getUniqueParameters(request.getUri()).isEmpty()
210+
&& !includeParametersInUri(request);
210211
}
211212

212213
private Map<String, String> header(String name, String value) {

spring-restdocs-core/src/test/java/org/springframework/restdocs/http/HttpRequestSnippetTests.java

+8
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,14 @@ public void putRequestWithParameter() throws IOException {
224224
.header("Content-Type", "application/x-www-form-urlencoded").content("b%26r=baz&a=alpha"));
225225
}
226226

227+
@Test
228+
public void putRequestWithTotallyOverlappingQueryStringAndParameters() throws IOException {
229+
new HttpRequestSnippet().document(this.operationBuilder.request("http://localhost/foo?a=alpha&b=bravo")
230+
.method("PUT").param("a", "alpha").param("b", "bravo").build());
231+
assertThat(this.generatedSnippets.httpRequest())
232+
.is(httpRequest(RequestMethod.PUT, "/foo?a=alpha&b=bravo").header(HttpHeaders.HOST, "localhost"));
233+
}
234+
227235
@Test
228236
public void multipartPost() throws IOException {
229237
new HttpRequestSnippet().document(this.operationBuilder.request("http://localhost/upload").method("POST")

0 commit comments

Comments
 (0)