Skip to content

Commit 532fc3b

Browse files
committed
primitive return types
1 parent d7ac4f5 commit 532fc3b

File tree

2 files changed

+50
-11
lines changed

2 files changed

+50
-11
lines changed

http-generator-nima/src/main/java/io/avaje/http/generator/helidon/nima/ControllerWriter.java

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import java.util.Optional;
88

99
import javax.lang.model.type.DeclaredType;
10+
import javax.lang.model.type.PrimitiveType;
1011

1112
import io.avaje.http.generator.core.BaseControllerWriter;
1213
import io.avaje.http.generator.core.Constants;
@@ -136,7 +137,9 @@ public void writeJsonBTypeFields(List<MethodReader> jsonMethods) {
136137
}
137138
writeFieldJsonReturnType(methodReader);
138139
}
139-
} public void writeFieldJsonBodyType(MethodReader methodReader) {
140+
}
141+
142+
public void writeFieldJsonBodyType(MethodReader methodReader) {
140143
// body types
141144
if (methodReader.getBodyType() != null) {
142145
methodReader.getParams().stream()
@@ -158,6 +161,8 @@ public void writeJsonBTypeFields(List<MethodReader> jsonMethods) {
158161

159162
public void writeFieldJsonReturnType(MethodReader methodReader) {
160163

164+
methodReader.getReturnType().getKind();
165+
161166
// return types
162167
if (methodReader.getReturnType() instanceof final DeclaredType fullType) {
163168
final var fullTypeString = fullType.toString();
@@ -169,8 +174,19 @@ public void writeFieldJsonReturnType(MethodReader methodReader) {
169174
writer.append("private final JsonType<%s> %sJsonType;", k, fieldName).eol();
170175
return new JsonbType(baseType, fieldName);
171176
});
177+
} else if (methodReader.getReturnType() instanceof final PrimitiveType fullType) {
178+
179+
jsonTypes.computeIfAbsent(
180+
fullType.toString(),
181+
k -> {
182+
final var baseType =
183+
"int".equals(k) ? "Integer" : k.substring(0, 1).toUpperCase() + k.substring(1);
184+
writer.append("private final JsonType<%s> %sJsonType;", baseType, k).eol();
185+
return new JsonbType(baseType, k);
186+
});
172187
} else {
173-
throw new UnsupportedOperationException("Only Objects are supported with Jsonb Return Types");
188+
throw new UnsupportedOperationException(
189+
"Only Primitives and Objects are supported with Jsonb Return Types");
174190
}
175191
}
176192

tests/test-nima-jsonb/src/main/java/org/example/HelloController.java

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

3-
import io.avaje.http.api.*;
4-
import io.helidon.common.http.HttpMediaType;
5-
import io.helidon.nima.webserver.http.ServerRequest;
6-
import io.helidon.nima.webserver.http.ServerResponse;
7-
83
import java.util.List;
94
import java.util.Map;
105
import java.util.Set;
116

7+
import io.avaje.http.api.Controller;
8+
import io.avaje.http.api.Form;
9+
import io.avaje.http.api.Get;
10+
import io.avaje.http.api.MediaType;
11+
import io.avaje.http.api.Post;
12+
import io.avaje.http.api.Produces;
13+
import io.avaje.http.api.Put;
14+
import io.helidon.common.http.HttpMediaType;
15+
import io.helidon.nima.webserver.http.ServerRequest;
16+
import io.helidon.nima.webserver.http.ServerResponse;
17+
1218
@Controller
1319
public class HelloController {
1420

@@ -47,7 +53,13 @@ Person person(String name) {
4753
return new Person(42, name + " hello");
4854
}
4955

50-
// curl -X POST http://localhost:8081/person -H 'Content-Type: application/json' -d '{"id":942,"name":"Jimmy"}'
56+
@Get("person/{long}")
57+
Person testLong(long id) {
58+
return new Person(id, "Giorno hello");
59+
}
60+
61+
// curl -X POST http://localhost:8081/person -H 'Content-Type: application/json' -d
62+
// '{"id":942,"name":"Jimmy"}'
5163
@Post("/person")
5264
Person postPerson(Person body) {
5365
return new Person(42, "Returning " + body.name());
@@ -80,18 +92,29 @@ String addMultiple(List<Person> newGuys) {
8092
return "New Guys Added";
8193
}
8294

83-
// curl -X POST http://localhost:8081/form -H "Content-Type: application/x-www-form-urlencoded" -d "name=Jimmy&email=jim@foo&url=notaurl"
95+
@Put("person/int")
96+
int testIntReturn() {
97+
return 422;
98+
}
99+
100+
@Put("person/long")
101+
long testLongReturn() {
102+
return 69;
103+
}
104+
105+
// curl -X POST http://localhost:8081/form -H "Content-Type: application/x-www-form-urlencoded" -d
106+
// "name=Jimmy&email=jim@foo&url=notaurl"
84107
@Form
85108
@Post("form")
86109
String form(String name, String email, String url) {
87110
return name + "-" + email + "-" + url;
88111
}
89112

90-
// curl -X POST http://localhost:8081/formBean -H "Content-Type: application/x-www-form-urlencoded" -d "name=FormBeanJimmy&email=jim@foo&url=notaurl"
113+
// curl -X POST http://localhost:8081/formBean -H "Content-Type:
114+
// application/x-www-form-urlencoded" -d "name=FormBeanJimmy&email=jim@foo&url=notaurl"
91115
@Form
92116
@Post("formBean")
93117
String formBean(MyForm form) {
94118
return form.name + "-" + form.email + "-" + form.url;
95119
}
96-
97120
}

0 commit comments

Comments
 (0)