Skip to content

Commit e1c3546

Browse files
committed
multival client
1 parent 9191ce2 commit e1c3546

File tree

4 files changed

+70
-2
lines changed

4 files changed

+70
-2
lines changed

http-client/src/main/java/io/avaje/http/client/DHttpClientRequest.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import java.util.*;
1717
import java.util.concurrent.CompletableFuture;
1818
import java.util.function.Supplier;
19+
import java.util.stream.Collectors;
1920
import java.util.stream.Stream;
2021

2122
import static java.net.http.HttpResponse.BodyHandlers.discarding;
@@ -124,7 +125,25 @@ public HttpClientRequest header(String name, String value) {
124125
}
125126

126127
@Override
128+
public HttpClientRequest header(String name, Collection<String> value) {
129+
if (headers == null) {
130+
headers = new LinkedHashMap<>();
131+
}
132+
headers.computeIfAbsent(name, s -> new ArrayList<>()).addAll(value);
133+
return this;
134+
}
135+
136+
@Override
137+
@SuppressWarnings("unchecked")
127138
public HttpClientRequest header(String name, Object value) {
139+
140+
if (value instanceof Collection) {
141+
final var headerList =
142+
((Collection<Object>) value).stream().map(Object::toString).collect(Collectors.toList());
143+
144+
return header(name, headerList);
145+
}
146+
128147
return value != null ? header(name, value.toString()) : this;
129148
}
130149

http-client/src/main/java/io/avaje/http/client/HttpClientRequest.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import java.net.http.HttpResponse;
66
import java.nio.file.Path;
77
import java.time.Duration;
8+
import java.util.Collection;
89
import java.util.List;
910
import java.util.Map;
1011
import java.util.function.Supplier;
@@ -125,6 +126,15 @@ public interface HttpClientRequest {
125126
*/
126127
HttpClientRequest header(Map<String, ?> headers);
127128

129+
/**
130+
* Add the headers to the request via Collection.
131+
*
132+
* @param name The header name
133+
* @param value The header values
134+
* @return The request being built
135+
*/
136+
HttpClientRequest header(String name, Collection<String> value);
137+
128138
/**
129139
* Return the header values that have been set for the given header name.
130140
*

http-client/src/main/java/io/avaje/http/client/UrlBuilder.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import java.net.URLEncoder;
44
import java.nio.charset.StandardCharsets;
5+
import java.util.Collection;
56
import java.util.Map;
67

78
/**
@@ -84,6 +85,14 @@ public UrlBuilder queryParam(String name, String value) {
8485
* The name and value parameters are url encoded.
8586
*/
8687
public UrlBuilder queryParam(String name, Object value) {
88+
89+
if (value instanceof Collection) {
90+
for (var e : (Collection) value) {
91+
queryParam(name, e);
92+
}
93+
return this;
94+
}
95+
8796
if (value != null) {
8897
addQueryParam(name, value.toString());
8998
}

http-client/src/test/java/io/avaje/http/client/DHttpClientRequestTest.java

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
package io.avaje.http.client;
22

3-
import org.junit.jupiter.api.Test;
3+
import static org.assertj.core.api.Assertions.assertThat;
44

55
import java.time.Duration;
6+
import java.util.List;
67

7-
import static org.assertj.core.api.Assertions.assertThat;
8+
import org.junit.jupiter.api.Test;
89

910
class DHttpClientRequestTest {
1011

@@ -21,6 +22,35 @@ void suppressLogging_listenerEvent_expect_suppressedPayloadContent() {
2122
assertThat(event.responseBody()).isEqualTo("<suppressed response body>");
2223
}
2324

25+
@Test
26+
void assertHeader() {
27+
final var request = new DHttpClientRequest(context, Duration.ZERO);
28+
29+
final var headers =
30+
request
31+
.header("Accept", (Object) List.of("application/json", "application/json2"))
32+
.header("Accept");
33+
34+
assertThat(headers).asList().contains("application/json", "application/json2");
35+
}
36+
37+
@Test
38+
void assertQuery() {
39+
final var client = HttpClient.builder().baseUrl("https://ap7i.github.com").build();
40+
41+
final var uri =
42+
client
43+
.request()
44+
.queryParam("param", List.of("param1", "param2"))
45+
.HEAD()
46+
.asDiscarding()
47+
.request()
48+
.uri()
49+
.toString();
50+
51+
assertThat(uri).isEqualTo("https://ap7i.github.com?param=param1&param=param2");
52+
}
53+
2454
@Test
2555
void skipAuthToken_listenerEvent_expect_suppressedPayloadContent() {
2656
final DHttpClientRequest request = new DHttpClientRequest(context, Duration.ZERO);

0 commit comments

Comments
 (0)