1515import io .avaje .http .generator .core .WebMethod ;
1616import io .avaje .http .generator .core .openapi .MediaType ;
1717
18+ import javax .lang .model .type .TypeMirror ;
19+
1820/**
1921 * Write code to register Web route for a given controller method.
2022 */
@@ -44,36 +46,13 @@ void writeHandler(boolean requestScoped) {
4446 writer .append (" private void _%s(ServerRequest req, ServerResponse res) throws Exception {" , method .simpleName ()).eol ();
4547 final var bodyType = method .bodyType ();
4648 if (bodyType != null ) {
47-
4849 if ("InputStream" .equals (bodyType )) {
4950 writer .append (" var %s = req.content().inputStream();" , method .bodyName ()).eol ();
5051 } else if (useJsonB ) {
51- final var fieldName =
52- method .params ().stream ()
53- .filter (MethodParam ::isBody )
54- .findFirst ()
55- .orElseThrow ()
56- .utype ()
57- .shortName ();
52+ final String fieldName = fieldNameOfBody ();
5853 writer .append (" var %s = %sJsonType.fromJson(req.content().inputStream());" , method .bodyName (), fieldName ).eol ();
59-
6054 } else {
61- // use default helidon content negotiation
62- method .params ().stream ()
63- .filter (MethodParam ::isBody )
64- .forEach (
65- param -> {
66- final var type = param .utype ();
67-
68- writer .append (" var %s = req.content()" , method .bodyName ());
69- writer .append (".as(" );
70- if (type .param0 () != null ) {
71- writer .append ("new io.helidon.common.GenericType<%s>() {}" , type .full ());
72- } else {
73- writer .append ("%s.class" , type .full ());
74- }
75- writer .append (");" ).eol ();
76- });
55+ defaultHelidonBodyContent ();
7756 }
7857 } else if (usesFormParams ()) {
7958 writer .append (" var formParams = req.content().as(Parameters.class);" ).eol ();
@@ -130,8 +109,7 @@ void writeHandler(boolean requestScoped) {
130109
131110 if (!method .isVoid ()) {
132111 writeContextReturn ();
133-
134- if (isAssignable2Interface (method .returnType ().toString (), "java.io.InputStream" )) {
112+ if (isInputStream (method .returnType ())) {
135113 final var uType = UType .parse (method .returnType ());
136114 writer .append (" result.transferTo(res.outputStream());" , uType .shortName ()).eol ();
137115 } else if (producesJson ()) {
@@ -144,6 +122,36 @@ void writeHandler(boolean requestScoped) {
144122 writer .append (" }" ).eol ().eol ();
145123 }
146124
125+ private boolean isInputStream (TypeMirror type ) {
126+ return isAssignable2Interface (type .toString (), "java.io.InputStream" );
127+ }
128+
129+ private void defaultHelidonBodyContent () {
130+ method .params ().stream ()
131+ .filter (MethodParam ::isBody )
132+ .forEach (
133+ param -> {
134+ final var type = param .utype ();
135+ writer .append (" var %s = req.content()" , method .bodyName ());
136+ writer .append (".as(" );
137+ if (type .param0 () != null ) {
138+ writer .append ("new io.helidon.common.GenericType<%s>() {}" , type .full ());
139+ } else {
140+ writer .append ("%s.class" , type .full ());
141+ }
142+ writer .append (");" ).eol ();
143+ });
144+ }
145+
146+ private String fieldNameOfBody () {
147+ return method .params ().stream ()
148+ .filter (MethodParam ::isBody )
149+ .findFirst ()
150+ .orElseThrow ()
151+ .utype ()
152+ .shortName ();
153+ }
154+
147155 private boolean producesJson () {
148156 return useJsonB
149157 && !disabledDirectWrites ()
@@ -171,9 +179,7 @@ private void writeContextReturn() {
171179 case APPLICATION_JSON -> writer .append (contentTypeString + "APPLICATION_JSON);" ).eol ();
172180 case TEXT_HTML -> writer .append (contentTypeString + "TEXT_HTML);" ).eol ();
173181 case TEXT_PLAIN -> writer .append (contentTypeString + "TEXT_PLAIN);" ).eol ();
174- case UNKNOWN -> writer
175- .append (contentTypeString + "create(\" %s\" ));" , producesOp .orElse ("UNKNOWN" ))
176- .eol ();
182+ case UNKNOWN -> writer .append (contentTypeString + "create(\" %s\" ));" , producesOp .orElse ("UNKNOWN" )).eol ();
177183 }
178184 }
179185
0 commit comments