diff --git a/spring-web/src/test/java/org/springframework/web/client/support/RestClientAdapterTests.java b/spring-web/src/test/java/org/springframework/web/client/support/RestClientAdapterTests.java index 11753141ede..a77ef103588 100644 --- a/spring-web/src/test/java/org/springframework/web/client/support/RestClientAdapterTests.java +++ b/spring-web/src/test/java/org/springframework/web/client/support/RestClientAdapterTests.java @@ -167,62 +167,21 @@ class RestClientAdapterTests { .hasLowCardinalityKeyValue("uri", "none"); } - @ParameterizedAdapterTest - void postWithHeader(MockWebServer server, Service service) throws Exception { - service.postWithHeader("testHeader", "testBody"); - - RecordedRequest request = server.takeRequest(); - assertThat(request.getMethod()).isEqualTo("POST"); - assertThat(request.getPath()).isEqualTo("/greeting"); - assertThat(request.getHeaders().get("testHeaderName")).isEqualTo("testHeader"); - assertThat(request.getBody().readUtf8()).isEqualTo("testBody"); - } - - @ParameterizedAdapterTest - void formData(MockWebServer server, Service service) throws Exception { - MultiValueMap map = new LinkedMultiValueMap<>(); - map.add("param1", "value 1"); - map.add("param2", "value 2"); - - service.postForm(map); - - RecordedRequest request = server.takeRequest(); - assertThat(request.getHeaders().get("Content-Type")).isEqualTo("application/x-www-form-urlencoded"); - assertThat(request.getBody().readUtf8()).isEqualTo("param1=value+1¶m2=value+2"); - } - - @ParameterizedAdapterTest // gh-30342 - void multipart(MockWebServer server, Service service) throws Exception { - MultipartFile file = new MockMultipartFile( - "testFileName", "originalTestFileName", MediaType.APPLICATION_JSON_VALUE, "test".getBytes()); - - service.postMultipart(file, "test2"); - - RecordedRequest request = server.takeRequest(); - assertThat(request.getHeaders().get("Content-Type")).startsWith("multipart/form-data;boundary="); - assertThat(request.getBody().readUtf8()).containsSubsequence( - "Content-Disposition: form-data; name=\"file\"; filename=\"originalTestFileName\"", - "Content-Type: application/json", "Content-Length: 4", "test", - "Content-Disposition: form-data; name=\"anotherPart\"", "Content-Type: text/plain;charset=UTF-8", - "Content-Length: 5", "test2"); - } - - @ParameterizedAdapterTest - void putWithCookies(MockWebServer server, Service service) throws Exception { - service.putWithCookies("test1", "test2"); + @Test + void greetingWithApiVersion() throws Exception { + RestClient restClient = RestClient.builder() + .baseUrl(anotherServer.url("/").toString()) + .apiVersionInserter(ApiVersionInserter.useHeader("X-API-Version")) + .build(); - RecordedRequest request = server.takeRequest(); - assertThat(request.getMethod()).isEqualTo("PUT"); - assertThat(request.getHeader("Cookie")).isEqualTo("firstCookie=test1; secondCookie=test2"); - } + RestClientAdapter adapter = RestClientAdapter.create(restClient); + Service service = HttpServiceProxyFactory.builderFor(adapter).build().createClient(Service.class); - @ParameterizedAdapterTest - void putWithSameNameCookies(MockWebServer server, Service service) throws Exception { - service.putWithSameNameCookies("test1", "test2"); + String response = service.getGreetingWithVersion(); - RecordedRequest request = server.takeRequest(); - assertThat(request.getMethod()).isEqualTo("PUT"); - assertThat(request.getHeader("Cookie")).isEqualTo("testCookie=test1; testCookie=test2"); + RecordedRequest request = anotherServer.takeRequest(); + assertThat(request.getHeader("X-API-Version")).isEqualTo("1.2"); + assertThat(response).isEqualTo("Hello Spring 2!"); } @ParameterizedAdapterTest @@ -270,20 +229,44 @@ class RestClientAdapterTests { assertThat(this.anotherServer.getRequestCount()).isEqualTo(0); } - @Test - void apiVersion() throws Exception { - RestClient restClient = RestClient.builder() - .baseUrl(anotherServer.url("/").toString()) - .apiVersionInserter(ApiVersionInserter.useHeader("X-API-Version")) - .build(); + @ParameterizedAdapterTest + void postWithHeader(MockWebServer server, Service service) throws Exception { + service.postWithHeader("testHeader", "testBody"); - RestClientAdapter adapter = RestClientAdapter.create(restClient); - Service service = HttpServiceProxyFactory.builderFor(adapter).build().createClient(Service.class); + RecordedRequest request = server.takeRequest(); + assertThat(request.getMethod()).isEqualTo("POST"); + assertThat(request.getPath()).isEqualTo("/greeting"); + assertThat(request.getHeaders().get("testHeaderName")).isEqualTo("testHeader"); + assertThat(request.getBody().readUtf8()).isEqualTo("testBody"); + } - service.getGreetingWithVersion(); + @ParameterizedAdapterTest + void postFormData(MockWebServer server, Service service) throws Exception { + MultiValueMap map = new LinkedMultiValueMap<>(); + map.add("param1", "value 1"); + map.add("param2", "value 2"); - RecordedRequest request = anotherServer.takeRequest(); - assertThat(request.getHeader("X-API-Version")).isEqualTo("1.2"); + service.postForm(map); + + RecordedRequest request = server.takeRequest(); + assertThat(request.getHeaders().get("Content-Type")).isEqualTo("application/x-www-form-urlencoded"); + assertThat(request.getBody().readUtf8()).isEqualTo("param1=value+1¶m2=value+2"); + } + + @ParameterizedAdapterTest // gh-30342 + void postMultipart(MockWebServer server, Service service) throws Exception { + MultipartFile file = new MockMultipartFile( + "testFileName", "originalTestFileName", MediaType.APPLICATION_JSON_VALUE, "test".getBytes()); + + service.postMultipart(file, "test2"); + + RecordedRequest request = server.takeRequest(); + assertThat(request.getHeaders().get("Content-Type")).startsWith("multipart/form-data;boundary="); + assertThat(request.getBody().readUtf8()).containsSubsequence( + "Content-Disposition: form-data; name=\"file\"; filename=\"originalTestFileName\"", + "Content-Type: application/json", "Content-Length: 4", "test", + "Content-Disposition: form-data; name=\"anotherPart\"", "Content-Type: text/plain;charset=UTF-8", + "Content-Length: 5", "test2"); } @ParameterizedAdapterTest // gh-34793 @@ -299,6 +282,24 @@ class RestClientAdapterTests { assertThat(request.getBody().readUtf8()).isEqualTo("[{\"name\":\"John\"},{\"name\":\"Richard\"}]"); } + @ParameterizedAdapterTest + void putWithCookies(MockWebServer server, Service service) throws Exception { + service.putWithCookies("test1", "test2"); + + RecordedRequest request = server.takeRequest(); + assertThat(request.getMethod()).isEqualTo("PUT"); + assertThat(request.getHeader("Cookie")).isEqualTo("firstCookie=test1; secondCookie=test2"); + } + + @ParameterizedAdapterTest + void putWithSameNameCookies(MockWebServer server, Service service) throws Exception { + service.putWithSameNameCookies("test1", "test2"); + + RecordedRequest request = server.takeRequest(); + assertThat(request.getMethod()).isEqualTo("PUT"); + assertThat(request.getHeader("Cookie")).isEqualTo("testCookie=test1; testCookie=test2"); + } + private static MockWebServer anotherServer() { MockWebServer server = new MockWebServer(); @@ -323,6 +324,16 @@ class RestClientAdapterTests { @GetExchange(url = "/greeting", version = "1.2") String getGreetingWithVersion(); + @GetExchange("/greeting") + ResponseEntity getWithUriBuilderFactory(UriBuilderFactory uriBuilderFactory); + + @GetExchange("/greeting/{id}") + ResponseEntity getWithUriBuilderFactory( + UriBuilderFactory uriBuilderFactory, @PathVariable String id, @RequestParam String param); + + @GetExchange("/greeting") + ResponseEntity getWithIgnoredUriBuilderFactory(URI uri, UriBuilderFactory uriBuilderFactory); + @PostExchange("/greeting") void postWithHeader(@RequestHeader("testHeaderName") String testHeader, @RequestBody String requestBody); @@ -342,30 +353,10 @@ class RestClientAdapterTests { void putWithSameNameCookies( @CookieValue("testCookie") String firstCookie, @CookieValue("testCookie") String secondCookie); - @GetExchange("/greeting") - ResponseEntity getWithUriBuilderFactory(UriBuilderFactory uriBuilderFactory); - - @GetExchange("/greeting/{id}") - ResponseEntity getWithUriBuilderFactory( - UriBuilderFactory uriBuilderFactory, @PathVariable String id, @RequestParam String param); - - @GetExchange("/greeting") - ResponseEntity getWithIgnoredUriBuilderFactory(URI uri, UriBuilderFactory uriBuilderFactory); } - static final class Person { - - private final String name; - - Person(String name) { - this.name = name; - } - - public String getName() { - return this.name; - } - + record Person(String name) { } }