diff --git a/spring-restdocs-webtestclient/src/main/java/org/springframework/restdocs/webtestclient/WebTestClientRequestConverter.java b/spring-restdocs-webtestclient/src/main/java/org/springframework/restdocs/webtestclient/WebTestClientRequestConverter.java index 2ecc66b6..ba46f539 100644 --- a/spring-restdocs-webtestclient/src/main/java/org/springframework/restdocs/webtestclient/WebTestClientRequestConverter.java +++ b/spring-restdocs-webtestclient/src/main/java/org/springframework/restdocs/webtestclient/WebTestClientRequestConverter.java @@ -30,7 +30,6 @@ import org.springframework.core.io.buffer.DataBufferUtils; import org.springframework.core.io.buffer.DefaultDataBuffer; import org.springframework.core.io.buffer.DefaultDataBufferFactory; import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpMethod; import org.springframework.http.MediaType; import org.springframework.http.ReactiveHttpInputMessage; import org.springframework.http.codec.FormHttpMessageReader; @@ -83,10 +82,8 @@ class WebTestClientRequestConverter implements RequestConverter } private Parameters extractParameters(ExchangeResult result) { - if (result.getMethod() == HttpMethod.GET) { - return this.queryStringParser.parse(result.getUrl()); - } Parameters parameters = new Parameters(); + parameters.addAll(this.queryStringParser.parse(result.getUrl())); if (MediaType.APPLICATION_FORM_URLENCODED .equals(result.getRequestHeaders().getContentType())) { parameters.addAll(this.formDataReader diff --git a/spring-restdocs-webtestclient/src/test/java/org/springframework/restdocs/webtestclient/WebTestClientRequestConverterTests.java b/spring-restdocs-webtestclient/src/test/java/org/springframework/restdocs/webtestclient/WebTestClientRequestConverterTests.java index ec5473b5..bd5264f8 100644 --- a/spring-restdocs-webtestclient/src/test/java/org/springframework/restdocs/webtestclient/WebTestClientRequestConverterTests.java +++ b/spring-restdocs-webtestclient/src/test/java/org/springframework/restdocs/webtestclient/WebTestClientRequestConverterTests.java @@ -131,7 +131,7 @@ public class WebTestClientRequestConverterTests { } @Test - public void postRequestWithParameters() throws Exception { + public void postRequestWithFormDataParameters() throws Exception { MultiValueMap parameters = new LinkedMultiValueMap<>(); parameters.addAll("a", Arrays.asList("alpha", "apple")); parameters.addAll("b", Arrays.asList("br&vo")); @@ -151,6 +151,47 @@ public class WebTestClientRequestConverterTests { assertThat(request.getParameters(), hasEntry("b", Arrays.asList("br&vo"))); } + @Test + public void postRequestWithQueryStringParameters() throws Exception { + ExchangeResult result = WebTestClient + .bindToRouterFunction(RouterFunctions.route(POST("/foo"), (req) -> { + req.body(BodyExtractors.toFormData()).block(); + return null; + })).configureClient().baseUrl("http://localhost").build().post() + .uri(URI.create("http://localhost/foo?a=alpha&a=apple&b=br%26vo")) + .exchange().expectBody().returnResult(); + OperationRequest request = this.converter.convert(result); + assertThat(request.getUri(), + is(URI.create("http://localhost/foo?a=alpha&a=apple&b=br%26vo"))); + assertThat(request.getMethod(), is(HttpMethod.POST)); + assertThat(request.getParameters().size(), is(2)); + assertThat(request.getParameters(), + hasEntry("a", Arrays.asList("alpha", "apple"))); + assertThat(request.getParameters(), hasEntry("b", Arrays.asList("br&vo"))); + } + + @Test + public void postRequestWithQueryStringAndFormDataParameters() throws Exception { + MultiValueMap parameters = new LinkedMultiValueMap<>(); + parameters.addAll("a", Arrays.asList("apple")); + ExchangeResult result = WebTestClient + .bindToRouterFunction(RouterFunctions.route(POST("/foo"), (req) -> { + req.body(BodyExtractors.toFormData()).block(); + return null; + })).configureClient().baseUrl("http://localhost").build().post() + .uri(URI.create("http://localhost/foo?a=alpha&b=br%26vo")) + .body(BodyInserters.fromFormData(parameters)).exchange().expectBody() + .returnResult(); + OperationRequest request = this.converter.convert(result); + assertThat(request.getUri(), + is(URI.create("http://localhost/foo?a=alpha&b=br%26vo"))); + assertThat(request.getMethod(), is(HttpMethod.POST)); + assertThat(request.getParameters().size(), is(2)); + assertThat(request.getParameters(), + hasEntry("a", Arrays.asList("alpha", "apple"))); + assertThat(request.getParameters(), hasEntry("b", Arrays.asList("br&vo"))); + } + @Test public void postRequestWithNoContentType() throws Exception { ExchangeResult result = WebTestClient