Skip to content

Commit 0393c9a

Browse files
committed
#66 - [client api] Support use of @BeanParam
1 parent 06af18a commit 0393c9a

File tree

4 files changed

+68
-4
lines changed

4 files changed

+68
-4
lines changed

http-generator-client/src/main/java/io/avaje/http/generator/client/ClientMethodWriter.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,9 +81,13 @@ void write() {
8181
writeHeaders();
8282
writePaths(segments);
8383
writeQueryParams(pathSegments);
84+
writeBeanParams(pathSegments);
8485
writeFormParams(pathSegments);
8586
writeBody();
87+
writeEnd();
88+
}
8689

90+
private void writeEnd() {
8791
WebMethod webMethod = method.getWebMethod();
8892
writer.append(" .%s()", webMethod.name()).eol();
8993
if (returnType == UType.VOID) {
@@ -174,6 +178,19 @@ private void writeHeaders() {
174178
}
175179
}
176180

181+
private void writeBeanParams(PathSegments segments) {
182+
for (MethodParam param : method.getParams()) {
183+
final String varName = param.getName();
184+
ParamType paramType = param.getParamType();
185+
PathSegments.Segment segment = segments.segment(varName);
186+
if (segment == null && paramType == ParamType.BEANPARAM) {
187+
TypeElement formBeanType = ctx.getTypeElement(param.getRawType());
188+
BeanParamReader form = new BeanParamReader(ctx, formBeanType, param.getName(), param.getShortType(), ParamType.QUERYPARAM);
189+
form.writeFormParams(writer);
190+
}
191+
}
192+
}
193+
177194
private void writeFormParams(PathSegments segments) {
178195
for (MethodParam param : method.getParams()) {
179196
final String varName = param.getName();
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package org.example;
2+
3+
import io.avaje.http.api.Header;
4+
import io.avaje.http.api.QueryParam;
5+
6+
public class CommonParams {
7+
8+
public Long firstRow;
9+
public Long maxRows;
10+
public String sortBy;
11+
@QueryParam("X-Xtr")
12+
private String extra;
13+
@Header
14+
public String filter;
15+
16+
public Long firstRow() {
17+
return firstRow;
18+
}
19+
20+
public String getExtra() {
21+
return extra;
22+
}
23+
}

tests/test-client/src/main/java/org/example/JunkApi.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,14 @@
11
package org.example;
22

3-
import io.avaje.http.api.Client;
4-
import io.avaje.http.api.Form;
5-
import io.avaje.http.api.Get;
6-
import io.avaje.http.api.Post;
3+
import io.avaje.http.api.*;
74
import io.avaje.http.client.HttpCall;
85

96
import java.io.InputStream;
107
import java.net.http.HttpRequest;
118
import java.net.http.HttpResponse;
129
import java.nio.file.Path;
1310
import java.util.List;
11+
import java.util.UUID;
1412
import java.util.concurrent.CompletableFuture;
1513
import java.util.stream.Stream;
1614

@@ -136,4 +134,11 @@ public interface JunkApi {
136134
@Form
137135
@Post("foo/{email}")
138136
void postFormWithPath(String email, String name, String other);
137+
138+
@Post("withBeanParam/{id}")
139+
void postWithBeanParam(UUID id, @BeanParam CommonParams commonParams);
140+
141+
@Form @Post("withFormParam/{id}")
142+
void postWithFormParam(UUID id, MyForm theForm, @BeanParam CommonParams commonParams);
143+
139144
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package org.example;
2+
3+
import io.avaje.http.api.Header;
4+
5+
import java.time.LocalDate;
6+
7+
public class MyForm {
8+
9+
public String name;
10+
public String email;
11+
public LocalDate started;
12+
13+
@Header("MFoo")
14+
public String fooHead;
15+
16+
public String email() {
17+
return email;
18+
}
19+
}

0 commit comments

Comments
 (0)