Skip to content

Commit 340d913

Browse files
committed
[jex-generator] use jex body methods
uses the new body methods of jex instead of a direct read using jsonb
1 parent 9507ab9 commit 340d913

File tree

2 files changed

+46
-2
lines changed

2 files changed

+46
-2
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: 45 additions & 1 deletion
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

@@ -38,12 +40,54 @@ public String bodyAsClass(UType type) {
3840
return "ctx.body()";
3941
} else if ("byte[]".equals(type.full())) {
4042
return "ctx.bodyAsBytes()";
43+
} else if (type.isGeneric() && ProcessingContext.useJsonb()) {
44+
return "ctx.<%s>bodyAsType(%s)".formatted(type.shortType(), writeJsonbType(type));
4145
} else if (ProcessingContext.useJsonb()) {
42-
return type.shortName() + "JsonType.fromJson(ctx.bodyAsInputStream())";
46+
return "ctx.bodyAsClass(%s.class)".formatted(type.shortType());
4347
}
4448
return "ctx.bodyAsClass(" + type.mainType() + ".class)";
4549
}
4650

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

0 commit comments

Comments
 (0)