Skip to content

Commit 1d9f5ed

Browse files
committed
#62 - ENH: [Client generator] Add Map<String,?> option for header() queryParam() and formParam()
1 parent 34913dc commit 1d9f5ed

File tree

6 files changed

+58
-21
lines changed

6 files changed

+58
-21
lines changed

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

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import io.avaje.http.generator.core.*;
44

55
import javax.lang.model.element.TypeElement;
6-
import java.util.List;
76
import java.util.Set;
87

98
/**
@@ -47,7 +46,7 @@ private void methodStart(Append writer) {
4746
if (count++ > 0) {
4847
writer.append(", ");
4948
}
50-
writer.append(param.getShortType()).append(" ");
49+
writer.append(param.getUType().shortType()).append(" ");
5150
writer.append(param.getName());
5251
checkBodyHandler(param);
5352
}
@@ -143,13 +142,15 @@ private void writeWithHandler() {
143142
}
144143

145144
private void writeQueryParams(PathSegments pathSegments) {
146-
List<MethodParam> params = method.getParams();
147-
for (MethodParam param : params) {
145+
for (MethodParam param : method.getParams()) {
148146
ParamType paramType = param.getParamType();
149147
if (paramType == ParamType.QUERYPARAM) {
150-
PathSegments.Segment segment = pathSegments.segment(param.getParamName());
151-
if (segment == null) {
152-
writer.append(" .queryParam(\"%s\", %s)", param.getParamName(), param.getName()).eol();
148+
if (pathSegments.segment(param.getParamName()) == null) {
149+
if (isMap(param)) {
150+
writer.append(" .queryParam(%s)", param.getName()).eol();
151+
} else {
152+
writer.append(" .queryParam(\"%s\", %s)", param.getParamName(), param.getName()).eol();
153+
}
153154
}
154155
}
155156
}
@@ -159,7 +160,11 @@ private void writeHeaders() {
159160
for (MethodParam param : method.getParams()) {
160161
ParamType paramType = param.getParamType();
161162
if (paramType == ParamType.HEADER) {
162-
writer.append(" .header(\"%s\", %s)", param.getParamName(), param.getName()).eol();
163+
if (isMap(param)) {
164+
writer.append(" .header(%s)", param.getName()).eol();
165+
} else {
166+
writer.append(" .header(\"%s\", %s)", param.getParamName(), param.getName()).eol();
167+
}
163168
}
164169
}
165170
}
@@ -168,7 +173,11 @@ private void writeFormParams() {
168173
for (MethodParam param : method.getParams()) {
169174
ParamType paramType = param.getParamType();
170175
if (paramType == ParamType.FORMPARAM) {
171-
writer.append(" .formParam(\"%s\", %s)", param.getParamName(), param.getName()).eol();
176+
if (isMap(param)) {
177+
writer.append(" .formParam(%s)", param.getName()).eol();
178+
} else {
179+
writer.append(" .formParam(\"%s\", %s)", param.getParamName(), param.getName()).eol();
180+
}
172181
} else if (paramType == ParamType.FORM) {
173182
TypeElement formBeanType = ctx.getTypeElement(param.getRawType());
174183
BeanParamReader form = new BeanParamReader(ctx, formBeanType, param.getName(), param.getShortType(), ParamType.FORMPARAM);
@@ -203,6 +212,14 @@ private void writePaths(Set<PathSegments.Segment> segments) {
203212
}
204213
}
205214

215+
private boolean isMap(MethodParam param) {
216+
return isMap(param.getUType().mainType());
217+
}
218+
219+
private boolean isMap(String type0) {
220+
return type0.equals("java.util.Map");
221+
}
222+
206223
private boolean isList(String type0) {
207224
return type0.equals("java.util.List");
208225
}

http-generator-core/src/main/java/io/avaje/http/generator/core/ElementReader.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ public class ElementReader {
1717

1818
private final ProcessingContext ctx;
1919
private final Element element;
20+
private final UType type;
2021
private final String rawType;
2122
private final String shortType;
2223
private final TypeHandler typeHandler;
@@ -34,12 +35,13 @@ public class ElementReader {
3435
//private boolean notNullJavax;
3536

3637
ElementReader(Element element, ProcessingContext ctx, ParamType defaultType, boolean formMarker) {
37-
this(element, Util.typeDef(element.asType()), ctx, defaultType, formMarker);
38+
this(element, null, Util.typeDef(element.asType()), ctx, defaultType, formMarker);
3839
}
3940

40-
ElementReader(Element element, String rawType, ProcessingContext ctx, ParamType defaultType, boolean formMarker) {
41+
ElementReader(Element element, UType type, String rawType, ProcessingContext ctx, ParamType defaultType, boolean formMarker) {
4142
this.ctx = ctx;
4243
this.element = element;
44+
this.type = type;
4345
this.rawType = rawType;
4446
this.shortType = Util.shortName(rawType);
4547
this.contextType = ctx.platform().isContextType(rawType);
@@ -291,6 +293,10 @@ public String getRawType() {
291293
return rawType;
292294
}
293295

296+
public UType getType() {
297+
return type;
298+
}
299+
294300
public Element getElement() {
295301
return element;
296302
}

http-generator-core/src/main/java/io/avaje/http/generator/core/MethodParam.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ public class MethodParam {
88

99
private final ElementReader elementParam;
1010

11-
MethodParam(VariableElement param, String rawType, ProcessingContext ctx, ParamType defaultParamType, boolean formMarker) {
12-
this.elementParam = new ElementReader(param, rawType, ctx, defaultParamType, formMarker);
11+
MethodParam(VariableElement param, UType type, String rawType, ProcessingContext ctx, ParamType defaultParamType, boolean formMarker) {
12+
this.elementParam = new ElementReader(param, type, rawType, ctx, defaultParamType, formMarker);
1313
}
1414

1515
public void writeCtxGet(Append writer, PathSegments segments) {
@@ -59,4 +59,8 @@ public String getParamName() {
5959
public ParamType getParamType() {
6060
return elementParam.getParamType();
6161
}
62+
63+
public UType getUType() {
64+
return elementParam.getType();
65+
}
6266
}

http-generator-core/src/main/java/io/avaje/http/generator/core/MethodReader.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -159,17 +159,16 @@ void read() {
159159

160160
final List<? extends VariableElement> parameters = element.getParameters();
161161
for (int i = 0; i < parameters.size(); i++) {
162-
163162
VariableElement p = parameters.get(i);
164-
165-
String rawType;
163+
TypeMirror typeMirror;
166164
if (actualParams != null) {
167-
rawType = Util.typeDef(actualParams.get(i));
165+
typeMirror = actualParams.get(i);
168166
} else {
169-
rawType = Util.typeDef(p.asType());
167+
typeMirror = p.asType();
170168
}
171-
172-
MethodParam param = new MethodParam(p, rawType, ctx, defaultParamType, formMarker);
169+
String rawType = Util.typeDef(typeMirror);
170+
UType type = Util.parse(typeMirror.toString());
171+
MethodParam param = new MethodParam(p, type, rawType, ctx, defaultParamType, formMarker);
173172
params.add(param);
174173
param.addImports(bean);
175174
}

tests/test-client/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
<dependency>
2626
<groupId>io.avaje</groupId>
2727
<artifactId>avaje-http-client</artifactId>
28-
<version>1.7</version>
28+
<version>1.8</version>
2929
</dependency>
3030

3131
<dependency>

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import java.net.http.HttpResponse;
99
import java.time.LocalDate;
1010
import java.util.List;
11+
import java.util.Map;
1112

1213
@Client
1314
@Path("moo")
@@ -17,6 +18,15 @@ public interface Simple {
1718
@Get("{uid}/{date}")
1819
HttpResponse<String> byIdg(long uid, LocalDate date, @Header URL access, @QueryParam("my-dat") LocalDate dt);
1920

21+
@Get("{uid}/withParams")
22+
HttpResponse<String> withParams(long uid, @QueryParam Map<String, ?> params);
23+
24+
@Post("postFormWithParams")
25+
void postFormWithParams(long uid, @FormParam Map<String, ?> frmParams, @Header Map<String, Object> headers, @QueryParam Map<String, String> qparams);
26+
27+
@Post("post3")
28+
void post3(long uid, @Header String xHead, @Header("a-b") String ab);
29+
2030
@Get("users/{user}/repos")
2131
List<Repo> listRepos(String user, String other);
2232

@@ -73,6 +83,7 @@ public boolean isActive() {
7383
public String email() {
7484
return email;
7585
}
86+
7687
public void setName(String name) {
7788
this.name = name;
7889
}

0 commit comments

Comments
 (0)