Consider parameters when performing a POST request

Previously, when producing the curl snippet for a POST request, the
request's parameter map was ignored. This commit updates the snippet
generation to look at the parameter map and POST it to the server
as application/x-www-form-urlencoded data using -d

Closes gh-38
This commit is contained in:
Yann Le Guern
2015-03-18 14:12:59 +01:00
committed by Andy Wilkinson
parent 8b133c7c66
commit cc54e5d7b0
2 changed files with 44 additions and 0 deletions

View File

@@ -160,6 +160,13 @@ public abstract class CurlDocumentation {
if (request.getContentLengthLong() > 0) {
this.writer.print(String.format(" -d '%s'", getContent(request)));
}
else if (isPostRequest(request)) {
Map<String, String[]> parameters = request.getParameterMap();
if (!parameters.isEmpty()) {
this.writer.print(String
.format(" -d '%s'", toQueryString(parameters)));
}
}
this.writer.println();
}
@@ -168,6 +175,10 @@ public abstract class CurlDocumentation {
return RequestMethod.GET == RequestMethod.valueOf(request.getMethod());
}
private boolean isPostRequest(HttpServletRequest request) {
return RequestMethod.POST == RequestMethod.valueOf(request.getMethod());
}
private boolean isNonStandardPort(HttpServletRequest request) {
return (SCHEME_HTTP.equals(request.getScheme()) && request.getRemotePort() != STANDARD_PORT_HTTP)
|| (SCHEME_HTTPS.equals(request.getScheme()) && request

View File

@@ -147,6 +147,39 @@ public class CurlDocumentationTests {
hasItem("$ curl http://localhost/foo?k1=foo+bar%26 -i"));
}
@Test
public void postRequestWithOneParameter() throws IOException {
MockHttpServletRequest request = new MockHttpServletRequest("POST", "/foo");
request.addParameter("k1", "v1");
documentCurlRequest("post-request-with-one-parameter").handle(
new StubMvcResult(request, null));
assertThat(requestSnippetLines("post-request-with-one-parameter"),
hasItem("$ curl http://localhost/foo -i -X POST -d 'k1=v1'"));
}
@Test
public void postRequestWithMultipleParameters() throws IOException {
MockHttpServletRequest request = new MockHttpServletRequest("POST", "/foo");
request.addParameter("k1", "v1");
request.addParameter("k2", "v2");
request.addParameter("k1", "v1-bis");
documentCurlRequest("post-request-with-multiple-parameters").handle(
new StubMvcResult(request, null));
assertThat(
requestSnippetLines("post-request-with-multiple-parameters"),
hasItem("$ curl http://localhost/foo -i -X POST -d 'k1=v1\\&k1=v1-bis\\&k2=v2'"));
}
@Test
public void postRequestWithUrlEncodedParameter() throws IOException {
MockHttpServletRequest request = new MockHttpServletRequest("POST", "/foo");
request.addParameter("k1", "a&b");
documentCurlRequest("post-request-with-url-encoded-parameter").handle(
new StubMvcResult(request, null));
assertThat(requestSnippetLines("post-request-with-url-encoded-parameter"),
hasItem("$ curl http://localhost/foo -i -X POST -d 'k1=a%26b'"));
}
@Test
public void requestWithHeaders() throws IOException {
MockHttpServletRequest request = new MockHttpServletRequest("GET", "/foo");