Skip to content

Commit 38770dc

Browse files
committed
#9 - Plus built in extra types for queryParam()
1 parent 55185d0 commit 38770dc

File tree

5 files changed

+326
-19
lines changed

5 files changed

+326
-19
lines changed

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

Lines changed: 68 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,7 @@
1111
import java.net.http.HttpResponse;
1212
import java.nio.charset.StandardCharsets;
1313
import java.nio.file.Path;
14-
import java.time.Duration;
15-
import java.time.LocalDate;
14+
import java.time.*;
1615
import java.util.*;
1716
import java.util.function.Supplier;
1817
import java.util.stream.Stream;
@@ -121,22 +120,88 @@ public HttpClientRequest matrixParam(String name, String value) {
121120
return this;
122121
}
123122

124-
125123
@Override
126124
public HttpClientRequest queryParam(String name, String value) {
127125
url.queryParam(name, value);
128126
return this;
129127
}
130128

129+
@Override
130+
public HttpClientRequest queryParam(String name, Integer value) {
131+
url.queryParam(name, value);
132+
return this;
133+
}
134+
135+
@Override
136+
public HttpClientRequest queryParam(String name, Long value) {
137+
url.queryParam(name, value);
138+
return this;
139+
}
140+
141+
@Override
142+
public HttpClientRequest queryParam(String name, UUID value) {
143+
url.queryParam(name, value);
144+
return this;
145+
}
146+
147+
@Override
148+
public HttpClientRequest queryParam(String name, Boolean value) {
149+
url.queryParam(name, value);
150+
return this;
151+
}
152+
153+
@Override
154+
public HttpClientRequest queryParam(String name, LocalDate value) {
155+
url.queryParam(name, value);
156+
return this;
157+
}
158+
159+
@Override
160+
public HttpClientRequest queryParam(String name, LocalTime value) {
161+
url.queryParam(name, value);
162+
return this;
163+
}
164+
165+
@Override
166+
public HttpClientRequest queryParam(String name, LocalDateTime value) {
167+
url.queryParam(name, value);
168+
return this;
169+
}
170+
171+
@Override
172+
public HttpClientRequest queryParam(String name, Instant value) {
173+
url.queryParam(name, value);
174+
return this;
175+
}
176+
131177
@Override
132178
public HttpClientRequest formParam(String name, String value) {
179+
if (value == null) {
180+
return this;
181+
}
133182
if (formParams == null) {
134183
formParams = new LinkedHashMap<>();
135184
}
136185
formParams.computeIfAbsent(name, s -> new ArrayList<>()).add(value);
137186
return this;
138187
}
139188

189+
@Override
190+
public HttpClientRequest formParam(String name, Long value) {
191+
if (value != null) {
192+
formParam(name, Long.toString(value));
193+
}
194+
return this;
195+
}
196+
197+
@Override
198+
public HttpClientRequest formParam(String name, UUID value) {
199+
if (value != null) {
200+
formParam(name, value.toString());
201+
}
202+
return this;
203+
}
204+
140205
@Override
141206
public HttpClientRequest body(BodyContent bodyContent) {
142207
encodedRequestBody = bodyContent;

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

Lines changed: 83 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,7 @@
44
import java.io.InputStream;
55
import java.net.http.HttpRequest;
66
import java.nio.file.Path;
7-
import java.time.Duration;
8-
import java.time.LocalDate;
7+
import java.time.*;
98
import java.util.UUID;
109
import java.util.function.Supplier;
1110

@@ -137,6 +136,78 @@ public interface HttpClientRequest {
137136
*/
138137
HttpClientRequest queryParam(String name, String value);
139138

139+
/**
140+
* Add a Integer query parameter
141+
*
142+
* @param name The name of the query parameter
143+
* @param value The value of the query parameter
144+
* @return The request being built
145+
*/
146+
HttpClientRequest queryParam(String name, Integer value);
147+
148+
/**
149+
* Add a Long query parameter
150+
*
151+
* @param name The name of the query parameter
152+
* @param value The value of the query parameter
153+
* @return The request being built
154+
*/
155+
HttpClientRequest queryParam(String name, Long value);
156+
157+
/**
158+
* Add a UUID query parameter
159+
*
160+
* @param name The name of the query parameter
161+
* @param value The value of the query parameter
162+
* @return The request being built
163+
*/
164+
HttpClientRequest queryParam(String name, UUID value);
165+
166+
/**
167+
* Add a Boolean query parameter
168+
*
169+
* @param name The name of the query parameter
170+
* @param value The value of the query parameter
171+
* @return The request being built
172+
*/
173+
HttpClientRequest queryParam(String name, Boolean value);
174+
175+
/**
176+
* Add a LocalDate query parameter
177+
*
178+
* @param name The name of the query parameter
179+
* @param value The value of the query parameter
180+
* @return The request being built
181+
*/
182+
HttpClientRequest queryParam(String name, LocalDate value);
183+
184+
/**
185+
* Add a LocalTime query parameter
186+
*
187+
* @param name The name of the query parameter
188+
* @param value The value of the query parameter
189+
* @return The request being built
190+
*/
191+
HttpClientRequest queryParam(String name, LocalTime value);
192+
193+
/**
194+
* Add a LocalDateTime query parameter
195+
*
196+
* @param name The name of the query parameter
197+
* @param value The value of the query parameter
198+
* @return The request being built
199+
*/
200+
HttpClientRequest queryParam(String name, LocalDateTime value);
201+
202+
/**
203+
* Add a Instant query parameter as ISO-8601 format.
204+
*
205+
* @param name The name of the query parameter
206+
* @param value The value of the query parameter
207+
* @return The request being built
208+
*/
209+
HttpClientRequest queryParam(String name, Instant value);
210+
140211
/**
141212
* Add a form parameter.
142213
*
@@ -146,6 +217,16 @@ public interface HttpClientRequest {
146217
*/
147218
HttpClientRequest formParam(String name, String value);
148219

220+
/**
221+
* Add a Long value form parameter.
222+
*/
223+
HttpClientRequest formParam(String name, Long value);
224+
225+
/**
226+
* Add a Long value form parameter.
227+
*/
228+
HttpClientRequest formParam(String name, UUID value);
229+
149230
/**
150231
* Set encoded body content.
151232
*/

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

Lines changed: 106 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@
22

33
import java.net.URLEncoder;
44
import java.nio.charset.StandardCharsets;
5+
import java.time.Instant;
56
import java.time.LocalDate;
7+
import java.time.LocalDateTime;
8+
import java.time.LocalTime;
69
import java.util.UUID;
710

811
/**
@@ -68,16 +71,116 @@ public UrlBuilder path(UUID val) {
6871
return path(val.toString());
6972
}
7073

74+
private void addQueryParam(String name, String safeValue) {
75+
buffer.append(hasParams ? '&' : '?');
76+
hasParams = true;
77+
buffer.append(enc(name)).append("=").append(safeValue);
78+
}
79+
7180
/**
7281
* Append a query parameter.
7382
* <p>
7483
* The name and value parameters are url encoded.
7584
*/
7685
public UrlBuilder queryParam(String name, String value) {
7786
if (value != null) {
78-
buffer.append(hasParams ? '&' : '?');
79-
hasParams = true;
80-
buffer.append(enc(name)).append("=").append(enc(value));
87+
addQueryParam(name, enc(value));
88+
}
89+
return this;
90+
}
91+
92+
/**
93+
* Append a query parameter.
94+
* <p>
95+
* The name and value parameters are url encoded.
96+
*/
97+
public UrlBuilder queryParam(String name, Integer value) {
98+
if (value != null) {
99+
addQueryParam(name, Integer.toString(value));
100+
}
101+
return this;
102+
}
103+
104+
/**
105+
* Append a query parameter.
106+
* <p>
107+
* The name and value parameters are url encoded.
108+
*/
109+
public UrlBuilder queryParam(String name, Long value) {
110+
if (value != null) {
111+
addQueryParam(name, Long.toString(value));
112+
}
113+
return this;
114+
}
115+
116+
/**
117+
* Append a query parameter.
118+
* <p>
119+
* The name and value parameters are url encoded.
120+
*/
121+
public UrlBuilder queryParam(String name, UUID value) {
122+
if (value != null) {
123+
addQueryParam(name, value.toString());
124+
}
125+
return this;
126+
}
127+
128+
/**
129+
* Append a query parameter.
130+
* <p>
131+
* The name and value parameters are url encoded.
132+
*/
133+
public UrlBuilder queryParam(String name, Boolean value) {
134+
if (value != null) {
135+
addQueryParam(name, value.toString());
136+
}
137+
return this;
138+
}
139+
140+
/**
141+
* Append a query parameter.
142+
* <p>
143+
* The name and value parameters are url encoded.
144+
*/
145+
public UrlBuilder queryParam(String name, LocalDate value) {
146+
if (value != null) {
147+
addQueryParam(name, value.toString());
148+
}
149+
return this;
150+
}
151+
152+
/**
153+
* Append a query parameter.
154+
* <p>
155+
* The name and value parameters are url encoded.
156+
*/
157+
public UrlBuilder queryParam(String name, LocalTime value) {
158+
if (value != null) {
159+
addQueryParam(name, value.toString());
160+
}
161+
return this;
162+
}
163+
164+
/**
165+
* Append a query parameter.
166+
* <p>
167+
* The name and value parameters are url encoded.
168+
*/
169+
public UrlBuilder queryParam(String name, LocalDateTime value) {
170+
if (value != null) {
171+
addQueryParam(name, value.toString());
172+
}
173+
return this;
174+
}
175+
176+
/**
177+
* Append a query parameter.
178+
* <p>
179+
* The name and value parameters are url encoded.
180+
*/
181+
public UrlBuilder queryParam(String name, Instant value) {
182+
if (value != null) {
183+
addQueryParam(name, value.toString());
81184
}
82185
return this;
83186
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ void get_hello_returningListOfBeans() {
5454
void get_withPathParamAndQueryParam_returningBean() {
5555

5656
final HelloDto dto = clientContext.request()
57-
.path("hello/43/2020-03-05").queryParam("otherParam", "other").queryParam("foo", null)
57+
.path("hello/43/2020-03-05").queryParam("otherParam", "other").queryParam("foo", (String) null)
5858
.get().bean(HelloDto.class);
5959

6060
assertThat(dto.id).isEqualTo(43L);

0 commit comments

Comments
 (0)