Skip to content

Commit 84be556

Browse files
committed
#32 - Add headerAddIfAbsent() helper method
1 parent 90aec44 commit 84be556

File tree

3 files changed

+49
-0
lines changed

3 files changed

+49
-0
lines changed

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,14 @@ public HttpClientRequest requestTimeout(Duration requestTimeout) {
105105
return this;
106106
}
107107

108+
@Override
109+
public HttpClientRequest headerAddIfAbsent(String name, Object value) {
110+
if (headers == null || !headers.containsKey(name)) {
111+
header(name, value);
112+
}
113+
return this;
114+
}
115+
108116
@Override
109117
public HttpClientRequest header(String name, String value) {
110118
if (headers == null) {
@@ -131,6 +139,9 @@ public HttpClientRequest header(Map<String, ?> headers) {
131139

132140
@Override
133141
public List<String> header(String name) {
142+
if (headers == null) {
143+
return Collections.emptyList();
144+
}
134145
final List<String> values = headers.get(name);
135146
return values == null ? Collections.emptyList() : values;
136147
}

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,15 @@ public interface HttpClientRequest {
9090
*/
9191
HttpClientRequest requestTimeout(Duration requestTimeout);
9292

93+
/**
94+
* Add the header to the request but only if there is no existing value for the given header.
95+
*
96+
* @param name The header name
97+
* @param value The header value
98+
* @return The request being built
99+
*/
100+
HttpClientRequest headerAddIfAbsent(String name, Object value);
101+
93102
/**
94103
* Add the header to the request.
95104
*

client/src/test/java/io/avaje/http/client/HelloControllerTest.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -432,6 +432,35 @@ void asString_readInvalidResponse() {
432432
assertThat(errorMap.get("email")).isEqualTo("must be a well-formed email address");
433433
}
434434

435+
@Test
436+
void headers_get_whenEmpty() {
437+
final HttpClientRequest request = clientContext.request();
438+
439+
List<String> headers = request.header("x-client-id");
440+
if (headers.isEmpty()) {
441+
request.header("x-client-id", "42");
442+
}
443+
assertThat(request.header("x-client-id")).containsExactly("42");
444+
}
445+
446+
@Test
447+
void headers_headerAddIfAbsent_whenEmpty() {
448+
final HttpClientRequest request = clientContext.request();
449+
assertThat(request.header("x-client-id")).isEmpty();
450+
451+
request.headerAddIfAbsent("x-client-id", "42");
452+
assertThat(request.header("x-client-id")).containsExactly("42");
453+
}
454+
455+
@Test
456+
void headers_headerAddIfAbsent_whenAlreadySet() {
457+
final HttpClientRequest request = clientContext.request();
458+
request.header("x-client-id", "someValue");
459+
460+
request.headerAddIfAbsent("x-client-id", "42");
461+
assertThat(request.header("x-client-id")).containsExactly("someValue");
462+
}
463+
435464
@Test
436465
void headers() {
437466
final HttpClientRequest request = clientContext.request();

0 commit comments

Comments
 (0)