diff --git a/http-generator-core/src/main/java/io/avaje/http/generator/core/UType.java b/http-generator-core/src/main/java/io/avaje/http/generator/core/UType.java index e86848f12..f22658b2b 100644 --- a/http-generator-core/src/main/java/io/avaje/http/generator/core/UType.java +++ b/http-generator-core/src/main/java/io/avaje/http/generator/core/UType.java @@ -75,6 +75,28 @@ default String genericParams() { return ""; } + static String innerTypesImport(String type) { + final var parts = type.split("\\."); + var result = ""; + var foundUpper = false; + + for (var i = 0; i < parts.length; i++) { + if (!Character.isUpperCase(parts[i].charAt(0))) { + result += parts[i] + "."; + } else if (!foundUpper) { + foundUpper = true; + result += parts[i] + (i == parts.length - 1 ? "" : "."); + } else { + break; + } + } + + if (result.endsWith(".")) { + result = result.substring(0, result.length() - 1); + } + return result; + } + class VoidType implements UType { @Override @@ -122,7 +144,7 @@ public String full() { public Set importTypes() { return isJavaLangPackage(rawType) ? Set.of() - : Collections.singleton(rawType.replace("[]", "")); + : Collections.singleton(innerTypesImport(rawType.replace("[]", ""))); } @Override @@ -217,28 +239,6 @@ public Set importTypes() { return set; } - public String innerTypesImport(String type) { - final var parts = type.split("\\."); - var result = ""; - var foundUpper = false; - - for (var i = 0; i < parts.length; i++) { - if (!Character.isUpperCase(parts[i].charAt(0))) { - result += parts[i] + "."; - } else if (!foundUpper) { - foundUpper = true; - result += parts[i] + (i == parts.length - 1 ? "" : "."); - } else { - break; - } - } - - if (result.endsWith(".")) { - result = result.substring(0, result.length() - 1); - } - return result; - } - @Override public boolean isGeneric() { return true; diff --git a/tests/test-nima-jsonb/src/main/java/org/example/path/PathTestController.java b/tests/test-nima-jsonb/src/main/java/org/example/path/PathTestController.java index d1787fdf9..5d1a3f970 100644 --- a/tests/test-nima-jsonb/src/main/java/org/example/path/PathTestController.java +++ b/tests/test-nima-jsonb/src/main/java/org/example/path/PathTestController.java @@ -1,5 +1,7 @@ package org.example.path; +import org.example.path.nest.PathNestController.NestedTypeResponse; + import io.avaje.http.api.Controller; import io.avaje.http.api.Get; import io.avaje.http.api.Path; @@ -14,4 +16,9 @@ public class PathTestController { String hello() { return "hi"; } + + @Get("/nested/respo") + NestedTypeResponse nested() { + return new NestedTypeResponse(0, null); + } } diff --git a/tests/test-nima-jsonb/src/main/java/org/example/path/nest/PathNestController.java b/tests/test-nima-jsonb/src/main/java/org/example/path/nest/PathNestController.java index bdd49b65e..47fb7479c 100644 --- a/tests/test-nima-jsonb/src/main/java/org/example/path/nest/PathNestController.java +++ b/tests/test-nima-jsonb/src/main/java/org/example/path/nest/PathNestController.java @@ -4,10 +4,13 @@ import io.avaje.http.api.Get; import io.avaje.http.api.Path; import io.avaje.http.api.Produces; +import io.avaje.jsonb.Json; @Path("test") @Controller public class PathNestController { + @Json + public record NestedTypeResponse(long id, String name) {} @Produces("text/plain") @Get