@@ -236,26 +236,15 @@ private MethodSpec makeRequestFactoryMethod(ServiceMethod serviceMethod) {
236236 variableElement -> {
237237 if (variableElement .getAnnotation (Multipart .class ) != null ) {
238238 // get from object
239- Element multipartElement = types .asElement (variableElement .asType ());
240- multipartElement .getEnclosedElements ().stream ()
241- .filter (element -> element .getKind () == ElementKind .FIELD )
242- .filter (element -> element .getAnnotation (FormParam .class ) != null )
243- .forEach (
244- field -> {
245- addMultipart (
246- serviceMethod ,
247- request ,
248- (VariableElement ) field ,
249- variableElement .getSimpleName ().toString ()
250- + "."
251- + fieldOrGetter (multipartElement , field ));
252- });
239+ getFromModel (serviceMethod , request , variableElement );
253240 } else {
254- addMultipart (
255- serviceMethod ,
256- request ,
257- variableElement ,
258- variableElement .getSimpleName ().toString ());
241+ if (!isParamField (variableElement )) {
242+ addMultipart (
243+ serviceMethod ,
244+ request ,
245+ variableElement ,
246+ variableElement .getSimpleName ().toString ());
247+ }
259248 }
260249 });
261250 request .addStatement (initializeStatement + "(multipartForm)" );
@@ -323,6 +312,24 @@ && nonNull(parameter.getAnnotation(DateFormat.class))) {
323312 return request .build ();
324313 }
325314
315+ private void getFromModel (
316+ ServiceMethod serviceMethod , MethodSpec .Builder request , VariableElement variableElement ) {
317+ Element multipartElement = types .asElement (variableElement .asType ());
318+ multipartElement .getEnclosedElements ().stream ()
319+ .filter (element -> element .getKind () == ElementKind .FIELD )
320+ .filter (element -> element .getAnnotation (FormParam .class ) != null )
321+ .forEach (
322+ field -> {
323+ addMultipart (
324+ serviceMethod ,
325+ request ,
326+ (VariableElement ) field ,
327+ variableElement .getSimpleName ().toString ()
328+ + "."
329+ + fieldOrGetter (multipartElement , field ));
330+ });
331+ }
332+
326333 private TypeName getParameterType (VariableElement parameter ) {
327334 if (Type .isPrimitiveArray (parameter .asType ())
328335 && Type .arrayComponentType (parameter .asType ()).getKind () == TypeKind .BYTE ) {
@@ -339,110 +346,112 @@ private void addMultipart(
339346 FormParam annotation = variableElement .getAnnotation (FormParam .class );
340347 Optional <FileName > fileName =
341348 Optional .ofNullable (variableElement .getAnnotation (FileName .class ));
342- if (isRequestBody (variableElement )) {
343- Optional <CodeBlock > requestWriter =
344- getRequestWriter (serviceMethod .method , variableElement .asType (), serviceMethod );
345- requestWriter .ifPresent (
346- codeBlock -> {
347- if (fileName .isPresent ()) {
348- request .addStatement (
349- "multipartForm.append($S, () -> $L.write($L), $S, $S)" ,
350- annotation .value (),
351- codeBlock ,
352- paramName ,
353- MediaType .APPLICATION_JSON ,
354- fileName .get ().value ());
355- } else {
356- request .addStatement (
357- "multipartForm.append($S, () -> $L.write($L), $S)" ,
358- annotation .value (),
359- codeBlock ,
360- paramName ,
361- MediaType .APPLICATION_JSON );
362- }
363- });
364- } else if (Type .isPrimitiveArray (variableElement .asType ())
365- && Type .arrayComponentType (variableElement .asType ()).getKind () == TypeKind .BYTE ) {
366- if (variableElement .getKind () == ElementKind .FIELD ) {
367- if (fileName .isPresent ()) {
368- request .addStatement (
369- "multipartForm.append($S, $L, $S, $S)" ,
370- annotation .value (),
371- paramName ,
372- MediaType .APPLICATION_OCTET_STREAM ,
373- fileName .get ().value ());
374- } else {
375- request .addStatement (
376- "multipartForm.append($S, $L, $S)" ,
377- annotation .value (),
378- paramName ,
379- MediaType .APPLICATION_OCTET_STREAM );
380- }
381- } else {
382- if (fileName .isPresent ()) {
383- request .addStatement (
384- "multipartForm.append($S, $L.getData(), $S, $S)" ,
385- annotation .value (),
386- paramName ,
387- MediaType .APPLICATION_OCTET_STREAM ,
388- fileName .get ().value ());
349+ if (nonNull (annotation )) {
350+ if (isRequestBody (variableElement )) {
351+ Optional <CodeBlock > requestWriter =
352+ getRequestWriter (serviceMethod .method , variableElement .asType (), serviceMethod );
353+ requestWriter .ifPresent (
354+ codeBlock -> {
355+ if (fileName .isPresent ()) {
356+ request .addStatement (
357+ "multipartForm.append($S, () -> $L.write($L), $S, $S)" ,
358+ annotation .value (),
359+ codeBlock ,
360+ paramName ,
361+ MediaType .APPLICATION_JSON ,
362+ fileName .get ().value ());
363+ } else {
364+ request .addStatement (
365+ "multipartForm.append($S, () -> $L.write($L), $S)" ,
366+ annotation .value (),
367+ codeBlock ,
368+ paramName ,
369+ MediaType .APPLICATION_JSON );
370+ }
371+ });
372+ } else if (Type .isPrimitiveArray (variableElement .asType ())
373+ && Type .arrayComponentType (variableElement .asType ()).getKind () == TypeKind .BYTE ) {
374+ if (variableElement .getKind () == ElementKind .FIELD ) {
375+ if (fileName .isPresent ()) {
376+ request .addStatement (
377+ "multipartForm.append($S, $L, $S, $S)" ,
378+ annotation .value (),
379+ paramName ,
380+ MediaType .APPLICATION_OCTET_STREAM ,
381+ fileName .get ().value ());
382+ } else {
383+ request .addStatement (
384+ "multipartForm.append($S, $L, $S)" ,
385+ annotation .value (),
386+ paramName ,
387+ MediaType .APPLICATION_OCTET_STREAM );
388+ }
389389 } else {
390- request .addStatement (
391- "multipartForm.append($S, $L.getData(), $S, $L.getFileName())" ,
392- annotation .value (),
393- paramName ,
394- MediaType .APPLICATION_OCTET_STREAM ,
395- paramName );
390+ if (fileName .isPresent ()) {
391+ request .addStatement (
392+ "multipartForm.append($S, $L.getData(), $S, $S)" ,
393+ annotation .value (),
394+ paramName ,
395+ MediaType .APPLICATION_OCTET_STREAM ,
396+ fileName .get ().value ());
397+ } else {
398+ request .addStatement (
399+ "multipartForm.append($S, $L.getData(), $S, $L.getFileName())" ,
400+ annotation .value (),
401+ paramName ,
402+ MediaType .APPLICATION_OCTET_STREAM ,
403+ paramName );
404+ }
396405 }
397- }
398406
399- } else {
400- if (processorUtil .isStringType (variableElement .asType ())) {
401- if (fileName .isPresent ()) {
402- request .addStatement (
403- "multipartForm.append($S, () -> $L, $S, $S)" ,
404- annotation .value (),
405- paramName ,
406- MediaType .TEXT_PLAIN ,
407- fileName .get ().value ());
408- } else {
409- request .addStatement (
410- "multipartForm.append($S, () -> $L, $S)" ,
411- annotation .value (),
412- paramName ,
413- MediaType .TEXT_PLAIN );
414- }
415- } else if (processorUtil .isPrimitive (variableElement .asType ())) {
416- if (fileName .isPresent ()) {
417- request .addStatement (
418- "multipartForm.append($S, () -> $T.valueOf($L), $S, $S)" ,
419- annotation .value (),
420- String .class ,
421- paramName ,
422- MediaType .TEXT_PLAIN ,
423- fileName .get ().value ());
424- } else {
425- request .addStatement (
426- "multipartForm.append($S, () -> $T.valueOf($L), $S)" ,
427- annotation .value (),
428- String .class ,
429- paramName ,
430- MediaType .TEXT_PLAIN );
431- }
432407 } else {
433- if (fileName .isPresent ()) {
434- request .addStatement (
435- "multipartForm.append($S, () -> $L.toString(), $S, $S)" ,
436- annotation .value (),
437- paramName ,
438- MediaType .TEXT_PLAIN ,
439- fileName .get ().value ());
408+ if (processorUtil .isStringType (variableElement .asType ())) {
409+ if (fileName .isPresent ()) {
410+ request .addStatement (
411+ "multipartForm.append($S, () -> $L, $S, $S)" ,
412+ annotation .value (),
413+ paramName ,
414+ MediaType .TEXT_PLAIN ,
415+ fileName .get ().value ());
416+ } else {
417+ request .addStatement (
418+ "multipartForm.append($S, () -> $L, $S)" ,
419+ annotation .value (),
420+ paramName ,
421+ MediaType .TEXT_PLAIN );
422+ }
423+ } else if (processorUtil .isPrimitive (variableElement .asType ())) {
424+ if (fileName .isPresent ()) {
425+ request .addStatement (
426+ "multipartForm.append($S, () -> $T.valueOf($L), $S, $S)" ,
427+ annotation .value (),
428+ String .class ,
429+ paramName ,
430+ MediaType .TEXT_PLAIN ,
431+ fileName .get ().value ());
432+ } else {
433+ request .addStatement (
434+ "multipartForm.append($S, () -> $T.valueOf($L), $S)" ,
435+ annotation .value (),
436+ String .class ,
437+ paramName ,
438+ MediaType .TEXT_PLAIN );
439+ }
440440 } else {
441- request .addStatement (
442- "multipartForm.append($S, () -> $L.toString(), $S)" ,
443- annotation .value (),
444- paramName ,
445- MediaType .TEXT_PLAIN );
441+ if (fileName .isPresent ()) {
442+ request .addStatement (
443+ "multipartForm.append($S, () -> $L.toString(), $S, $S)" ,
444+ annotation .value (),
445+ paramName ,
446+ MediaType .TEXT_PLAIN ,
447+ fileName .get ().value ());
448+ } else {
449+ request .addStatement (
450+ "multipartForm.append($S, () -> $L.toString(), $S)" ,
451+ annotation .value (),
452+ paramName ,
453+ MediaType .TEXT_PLAIN );
454+ }
446455 }
447456 }
448457 }
0 commit comments