Skip to content

Commit 074eae2

Browse files
authored
Merge pull request #578 from SentryMan/jex-bodyStream
[jex-generator] use body stream methods
2 parents a57da88 + 598a679 commit 074eae2

File tree

2 files changed

+45
-3
lines changed

2 files changed

+45
-3
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -311,7 +311,7 @@ private void readSuper(TypeElement beanType) {
311311
if (superclass.getKind() != TypeKind.NONE) {
312312
final DeclaredType declaredType = (DeclaredType) superclass;
313313
final TypeElement superElement = asElement(superclass);
314-
if (!"java.lang.Object".equals(superElement.toString())) {
314+
if (!"java.lang.Object".equals(superElement.getQualifiedName().toString())) {
315315
for (final Element element : superElement.getEnclosedElements()) {
316316
if (element.getKind() == ElementKind.METHOD) {
317317
readMethod((ExecutableElement) element, declaredType);

http-generator-jex/src/main/java/io/avaje/http/generator/jex/JexAdapter.java

Lines changed: 44 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package io.avaje.http.generator.jex;
22

33
import java.util.List;
4+
import java.util.stream.Collectors;
45

56
import io.avaje.http.generator.core.Append;
67
import io.avaje.http.generator.core.Constants;
@@ -9,6 +10,7 @@
910
import io.avaje.http.generator.core.PlatformAdapter;
1011
import io.avaje.http.generator.core.ProcessingContext;
1112
import io.avaje.http.generator.core.UType;
13+
import io.avaje.http.generator.core.Util;
1214

1315
class JexAdapter implements PlatformAdapter {
1416

@@ -31,19 +33,59 @@ public boolean isBodyMethodParam() {
3133

3234
@Override
3335
public String bodyAsClass(UType type) {
34-
3536
if ("java.io.InputStream".equals(type.full())) {
3637
return "ctx.bodyAsInputStream()";
3738
} else if ("java.lang.String".equals(type.full())) {
3839
return "ctx.body()";
3940
} else if ("byte[]".equals(type.full())) {
4041
return "ctx.bodyAsBytes()";
42+
} else if (type.isGeneric() && ProcessingContext.useJsonb()) {
43+
return "ctx.<%s>bodyAsType(%s)".formatted(type.shortType(), writeJsonbType(type));
4144
} else if (ProcessingContext.useJsonb()) {
42-
return type.shortName() + "JsonType.fromJson(ctx.bodyAsInputStream())";
45+
return "ctx.bodyAsClass(%s.class)".formatted(type.shortType());
4346
}
4447
return "ctx.bodyAsClass(" + type.mainType() + ".class)";
4548
}
4649

50+
public static String writeJsonbType(UType type) {
51+
var writer = new StringBuilder();
52+
53+
switch (type.mainType()) {
54+
case "java.util.List":
55+
writeType(type.paramRaw(), writer);
56+
writer.append(".list()");
57+
break;
58+
case "java.util.Set":
59+
writeType(type.paramRaw(), writer);
60+
writer.append(".set()");
61+
break;
62+
case "java.util.Map":
63+
writeType(type.paramRaw(), writer);
64+
writer.append(".map()");
65+
break;
66+
default: {
67+
if (type.mainType().contains("java.util")) {
68+
throw new UnsupportedOperationException(
69+
"Only java.util Map, Set and List are supported JsonB Controller Collection Types");
70+
}
71+
writeType(type, writer);
72+
}
73+
}
74+
return writer.toString();
75+
}
76+
77+
static void writeType(UType type, StringBuilder writer) {
78+
final var params =
79+
type.params().stream()
80+
.map(Util::shortName)
81+
.map(s -> "?".equals(s) ? "Object" : s)
82+
.collect(Collectors.joining(".class, "));
83+
84+
writer.append(
85+
"Types.newParameterizedType(%s.class, %s.class)"
86+
.formatted(Util.shortName(type.mainType()), params));
87+
}
88+
4789
@Override
4890
public String indent() {
4991
return " ";

0 commit comments

Comments
 (0)