@@ -186,19 +186,30 @@ void writeHandler(boolean requestScoped) {
186
186
writer .append (");" ).eol ();
187
187
188
188
if (!method .isVoid () && !isFilter ) {
189
- writeContextReturn ();
189
+ TypeMirror typeMirror = method .returnType ();
190
+ boolean includeNoContent = !typeMirror .getKind ().isPrimitive ();
191
+ if (includeNoContent ) {
192
+ writer .append (" if (result == null) {" ).eol ();
193
+ writer .append (" res.status(NO_CONTENT_204).send();" ).eol ();
194
+ writer .append (" } else {" ).eol ();
195
+ }
196
+ String indent = includeNoContent ? " " : " " ;
197
+ writeContextReturn (indent );
190
198
if (isInputStream (method .returnType ())) {
191
199
final var uType = UType .parse (method .returnType ());
192
- writer .append (" result.transferTo(res.outputStream());" , uType .shortName ()).eol ();
200
+ writer .append (indent ). append ( " result.transferTo(res.outputStream());" , uType .shortName ()).eol ();
193
201
} else if (producesJson ()) {
194
202
if (returnTypeString ()) {
195
- writer .append (" res.send(result); // send raw JSON" ).eol ();
203
+ writer .append (indent ). append ( " res.send(result); // send raw JSON" ).eol ();
196
204
} else {
197
205
final var uType = UType .parse (method .returnType ());
198
- writer .append (" %sJsonType.toJson(result, JsonOutput.of(res));" , uType .shortName ()).eol ();
206
+ writer .append (indent ). append ( " %sJsonType.toJson(result, JsonOutput.of(res));" , uType .shortName ()).eol ();
199
207
}
200
208
} else {
201
- writer .append (" res.send(result);" ).eol ();
209
+ writer .append (indent ).append ("res.send(result);" ).eol ();
210
+ }
211
+ if (includeNoContent ) {
212
+ writer .append (" }" ).eol ();
202
213
}
203
214
}
204
215
writer .append (" }" ).eol ().eol ();
@@ -260,14 +271,14 @@ private boolean usesFormParams() {
260
271
return method .params ().stream ().anyMatch (p -> p .isForm () || ParamType .FORMPARAM .equals (p .paramType ()));
261
272
}
262
273
263
- private void writeContextReturn () {
274
+ private void writeContextReturn (String indent ) {
264
275
final var producesOp = Optional .ofNullable (method .produces ());
265
276
if (producesOp .isEmpty () && !useJsonB ) {
266
277
return ;
267
278
}
268
-
269
279
final var produces = producesOp .map (MediaType ::parse ).orElse (MediaType .APPLICATION_JSON );
270
- final var contentTypeString = " res.headers().contentType(MediaTypes." ;
280
+ final var contentTypeString = "res.headers().contentType(MediaTypes." ;
281
+ writer .append (indent );
271
282
switch (produces ) {
272
283
case APPLICATION_JSON -> writer .append (contentTypeString ).append ("APPLICATION_JSON);" ).eol ();
273
284
case TEXT_HTML -> writer .append (contentTypeString ).append ("TEXT_HTML);" ).eol ();
0 commit comments