Skip to content

Commit a400c47

Browse files
authored
BAEL-7196 Multiple Headers on WebClient (#18465)
* BAEL-7196 Multiple Headers on WebClient * Rename test file
1 parent 5fce2da commit a400c47

File tree

1 file changed

+120
-0
lines changed

1 file changed

+120
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
package com.baeldung.spring.multipleheaders;
2+
3+
import static org.junit.jupiter.api.Assertions.assertEquals;
4+
import static org.junit.jupiter.api.Assertions.assertNotNull;
5+
6+
import java.io.IOException;
7+
import java.util.Collections;
8+
import java.util.UUID;
9+
10+
import org.junit.jupiter.api.AfterAll;
11+
import org.junit.jupiter.api.BeforeAll;
12+
import org.junit.jupiter.api.Test;
13+
import org.springframework.http.HttpStatus;
14+
import org.springframework.http.HttpStatusCode;
15+
import org.springframework.http.ResponseEntity;
16+
import org.springframework.web.reactive.function.client.ClientRequest;
17+
import org.springframework.web.reactive.function.client.ExchangeFilterFunction;
18+
import org.springframework.web.reactive.function.client.WebClient;
19+
20+
import okhttp3.mockwebserver.MockResponse;
21+
import okhttp3.mockwebserver.MockWebServer;
22+
import okhttp3.mockwebserver.RecordedRequest;
23+
24+
public class MultipleHeadersUnitTest {
25+
26+
private static final String RANDOM_UUID = UUID.randomUUID().toString();
27+
28+
private static MockWebServer mockWebServer;
29+
30+
@BeforeAll
31+
static void setup() throws IOException {
32+
mockWebServer = new MockWebServer();
33+
mockWebServer.start();
34+
}
35+
36+
@AfterAll
37+
static void shutdown() throws IOException {
38+
mockWebServer.shutdown();
39+
}
40+
41+
@Test
42+
public void givenRequestWithHeaders_whenSendingRequest_thenAssertHeadersAreSent() throws Exception {
43+
mockWebServer.enqueue(new MockResponse().setResponseCode(HttpStatus.OK.value()));
44+
45+
WebClient client = WebClient.builder()
46+
.baseUrl(mockWebServer.url("/").toString())
47+
.build();
48+
49+
ResponseEntity<Void> response = client.get()
50+
.headers(headers -> {
51+
headers.put("X-Request-Id", Collections.singletonList(RANDOM_UUID));
52+
headers.put("Custom-Header", Collections.singletonList("CustomValue"));
53+
})
54+
.retrieve()
55+
.toBodilessEntity()
56+
.block();
57+
58+
assertNotNull(response);
59+
assertEquals(HttpStatusCode.valueOf(HttpStatus.OK.value()), response.getStatusCode());
60+
61+
RecordedRequest recordedRequest = mockWebServer.takeRequest();
62+
assertEquals(RANDOM_UUID, recordedRequest.getHeader("X-Request-Id"));
63+
assertEquals("CustomValue", recordedRequest.getHeader("Custom-Header"));
64+
}
65+
66+
@Test
67+
public void givenRequestWithDefaultHeaders_whenSendingRequest_thenAssertHeadersAreSent() throws Exception {
68+
mockWebServer.enqueue(new MockResponse().setResponseCode(HttpStatus.OK.value()));
69+
70+
WebClient client = WebClient.builder()
71+
.baseUrl(mockWebServer.url("/").toString())
72+
.defaultHeaders(headers -> {
73+
headers.put("X-Request-Id", Collections.singletonList(RANDOM_UUID));
74+
headers.put("Custom-Header", Collections.singletonList("CustomValue"));
75+
})
76+
.build();
77+
78+
ResponseEntity<Void> response = client.get()
79+
.retrieve()
80+
.toBodilessEntity()
81+
.block();
82+
83+
assertNotNull(response);
84+
assertEquals(HttpStatusCode.valueOf(HttpStatus.OK.value()), response.getStatusCode());
85+
86+
RecordedRequest recordedRequest = mockWebServer.takeRequest();
87+
assertEquals(RANDOM_UUID, recordedRequest.getHeader("X-Request-Id"));
88+
assertEquals("CustomValue", recordedRequest.getHeader("Custom-Header"));
89+
}
90+
91+
@Test
92+
public void givenRequestWithDynamicHeaders_whenSendingRequest_thenAssertHeadersAreSent() throws Exception {
93+
mockWebServer.enqueue(new MockResponse().setResponseCode(HttpStatus.OK.value()));
94+
95+
ExchangeFilterFunction dynamicHeadersFilter = (request, next) -> next.exchange(ClientRequest.from(request)
96+
.headers(headers -> {
97+
headers.put("X-Request-Id", Collections.singletonList(RANDOM_UUID));
98+
headers.put("Custom-Header", Collections.singletonList("CustomValue"));
99+
})
100+
.build());
101+
102+
WebClient client = WebClient.builder()
103+
.baseUrl(mockWebServer.url("/").toString())
104+
.filter(dynamicHeadersFilter)
105+
.build();
106+
107+
ResponseEntity<Void> response = client.get()
108+
.retrieve()
109+
.toBodilessEntity()
110+
.block();
111+
112+
assertNotNull(response);
113+
assertEquals(HttpStatusCode.valueOf(HttpStatus.OK.value()), response.getStatusCode());
114+
115+
RecordedRequest recordedRequest = mockWebServer.takeRequest();
116+
assertEquals(RANDOM_UUID, recordedRequest.getHeader("X-Request-Id"));
117+
assertEquals("CustomValue", recordedRequest.getHeader("Custom-Header"));
118+
}
119+
120+
}

0 commit comments

Comments
 (0)