Skip to content

Commit ef44359

Browse files
committed
add lambda to add the type comment conditionally.
1 parent 6edb518 commit ef44359

8 files changed

Lines changed: 30 additions & 9 deletions

File tree

modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/SpringCodegen.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -647,6 +647,27 @@ public void processOpts() {
647647

648648
additionalProperties.put("lambdaSplitString", new SplitStringLambda());
649649

650+
// Lambda to add type comment only if actual type differs from implemented type
651+
// Format: "implementedType|actualType" -> " /* actualType */" or ""
652+
additionalProperties.put("lambdaTypeComment", (Mustache.Lambda) (fragment, writer) -> {
653+
String input = fragment.execute().trim();
654+
String[] parts = input.split("\\|", 2);
655+
if (parts.length == 2) {
656+
String implementedType = parts[0].trim();
657+
String actualType = parts[1].trim();
658+
659+
// Only add comment if types differ
660+
if (!implementedType.equals(actualType)) {
661+
// Also check if implementedType is a collection of actualType (e.g., List<String> vs String)
662+
String expectedCollection = "List<" + actualType + ">";
663+
String expectedFlux = "Flux<" + actualType + ">";
664+
if (!implementedType.equals(expectedCollection) && !implementedType.equals(expectedFlux)) {
665+
writer.write(" /* " + actualType + " */");
666+
}
667+
}
668+
}
669+
});
670+
650671
// apiController: hide implementation behind undocumented flag to temporarily preserve code
651672
additionalProperties.put("_api_controller_impl_", false);
652673
// HEADS-UP: Do not add more template file after this block
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{{#isFormParam}}{{^isFile}}{{>paramDoc}}{{#useBeanValidation}} {{>beanValidationBodyParams}}@Valid{{/useBeanValidation}} {{#isModel}}@RequestPart{{/isModel}}{{^isModel}}{{#isArray}}{{#items.isModel}}@RequestPart{{/items.isModel}}{{^items.isModel}}{{#reactive}}{{#vendorExtensions.x-isMultipartFormData}}@RequestPart{{/vendorExtensions.x-isMultipartFormData}}{{^vendorExtensions.x-isMultipartFormData}}@RequestParam{{/vendorExtensions.x-isMultipartFormData}}{{/reactive}}{{^reactive}}@RequestParam{{/reactive}}{{/items.isModel}}{{/isArray}}{{^isArray}}{{#reactive}}{{#vendorExtensions.x-isMultipartFormData}}@RequestPart{{/vendorExtensions.x-isMultipartFormData}}{{^vendorExtensions.x-isMultipartFormData}}@RequestParam{{/vendorExtensions.x-isMultipartFormData}}{{/reactive}}{{^reactive}}@RequestParam{{/reactive}}{{/isArray}}{{/isModel}}(value = "{{baseName}}"{{#required}}, required = true{{/required}}{{^required}}, required = false{{/required}}){{>dateTimeParam}} {{^required}}{{#useOptional}}Optional<{{/useOptional}}{{/required}}{{#reactive}}{{#vendorExtensions.x-isMultipartFormData}}{{#isModel}}{{{dataType}}}{{/isModel}}{{^isModel}}{{#isArray}}{{#items.isModel}}{{{dataType}}}{{/items.isModel}}{{^items.isModel}}Flux<String> /* Flux<{{{dataType}}}> */{{/items.isModel}}{{/isArray}}{{^isArray}}String /* {{{dataType}}} */{{/isArray}}{{/isModel}}{{/vendorExtensions.x-isMultipartFormData}}{{^vendorExtensions.x-isMultipartFormData}}{{{dataType}}}{{/vendorExtensions.x-isMultipartFormData}}{{/reactive}}{{^reactive}}{{{dataType}}}{{/reactive}}{{^required}}{{#useOptional}}>{{/useOptional}}{{/required}} {{paramName}}{{/isFile}}{{#isByteArray}} /* base64 encoded binary */{{/isByteArray}}{{#isFile}}{{>paramDoc}} @RequestPart(value = "{{baseName}}"{{#required}}, required = true{{/required}}{{^required}}, required = false{{/required}}) {{#reactive}}{{#isArray}}Flux<{{/isArray}}Part{{#isArray}}>{{/isArray}}{{/reactive}}{{^reactive}}{{#isArray}}List<{{/isArray}}MultipartFile{{#isArray}}>{{/isArray}}{{/reactive}} {{paramName}}{{/isFile}}{{/isFormParam}}
1+
{{#isFormParam}}{{^isFile}}{{>paramDoc}}{{#useBeanValidation}} {{>beanValidationBodyParams}}@Valid{{/useBeanValidation}} {{#isModel}}@RequestPart{{/isModel}}{{^isModel}}{{#isArray}}{{#items.isModel}}@RequestPart{{/items.isModel}}{{^items.isModel}}{{#reactive}}{{#vendorExtensions.x-isMultipartFormData}}@RequestPart{{/vendorExtensions.x-isMultipartFormData}}{{^vendorExtensions.x-isMultipartFormData}}@RequestParam{{/vendorExtensions.x-isMultipartFormData}}{{/reactive}}{{^reactive}}@RequestParam{{/reactive}}{{/items.isModel}}{{/isArray}}{{^isArray}}{{#reactive}}{{#vendorExtensions.x-isMultipartFormData}}@RequestPart{{/vendorExtensions.x-isMultipartFormData}}{{^vendorExtensions.x-isMultipartFormData}}@RequestParam{{/vendorExtensions.x-isMultipartFormData}}{{/reactive}}{{^reactive}}@RequestParam{{/reactive}}{{/isArray}}{{/isModel}}(value = "{{baseName}}"{{#required}}, required = true{{/required}}{{^required}}, required = false{{/required}}){{>dateTimeParam}} {{^required}}{{#useOptional}}Optional<{{/useOptional}}{{/required}}{{#reactive}}{{#vendorExtensions.x-isMultipartFormData}}{{#isModel}}{{{dataType}}}{{/isModel}}{{^isModel}}{{#isArray}}{{#items.isModel}}{{{dataType}}}{{/items.isModel}}{{^items.isModel}}Flux<String>{{#lambdaTypeComment}}Flux<String>|{{{dataType}}}{{/lambdaTypeComment}}{{/items.isModel}}{{/isArray}}{{^isArray}}String{{#lambdaTypeComment}}String|{{{dataType}}}{{/lambdaTypeComment}}{{/isArray}}{{/isModel}}{{/vendorExtensions.x-isMultipartFormData}}{{^vendorExtensions.x-isMultipartFormData}}{{{dataType}}}{{/vendorExtensions.x-isMultipartFormData}}{{/reactive}}{{^reactive}}{{{dataType}}}{{/reactive}}{{^required}}{{#useOptional}}>{{/useOptional}}{{/required}} {{paramName}}{{/isFile}}{{#isByteArray}} /* base64 encoded binary */{{/isByteArray}}{{#isFile}}{{>paramDoc}} @RequestPart(value = "{{baseName}}"{{#required}}, required = true{{/required}}{{^required}}, required = false{{/required}}) {{#reactive}}{{#isArray}}Flux<{{/isArray}}Part{{#isArray}}>{{/isArray}}{{/reactive}}{{^reactive}}{{#isArray}}List<{{/isArray}}MultipartFile{{#isArray}}>{{/isArray}}{{/reactive}} {{paramName}}{{/isFile}}{{/isFormParam}}

samples/client/petstore/spring-http-interface-reactive-noResponseEntity/src/main/java/org/openapitools/api/PetApi.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,7 @@ Mono<Void> updatePetWithForm(
209209
)
210210
Mono<ModelApiResponse> uploadFile(
211211
@PathVariable("petId") Long petId,
212-
@RequestPart(value = "additionalMetadata", required = false) String /* String */ additionalMetadata,
212+
@RequestPart(value = "additionalMetadata", required = false) String additionalMetadata,
213213
@RequestPart(value = "file", required = false) Part file
214214
);
215215

@@ -233,7 +233,7 @@ Mono<ModelApiResponse> uploadFile(
233233
Mono<ModelApiResponse> uploadFileWithRequiredFile(
234234
@PathVariable("petId") Long petId,
235235
@RequestPart(value = "requiredFile", required = true) Part requiredFile,
236-
@RequestPart(value = "additionalMetadata", required = false) String /* String */ additionalMetadata
236+
@RequestPart(value = "additionalMetadata", required = false) String additionalMetadata
237237
);
238238

239239
}

samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/api/PetApi.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ Mono<ResponseEntity<Void>> updatePetWithForm(
200200
)
201201
Mono<ResponseEntity<ModelApiResponse>> uploadFile(
202202
@PathVariable("petId") Long petId,
203-
@RequestPart(value = "additionalMetadata", required = false) String /* String */ additionalMetadata,
203+
@RequestPart(value = "additionalMetadata", required = false) String additionalMetadata,
204204
@RequestPart(value = "file", required = false) Part file
205205
);
206206

@@ -223,7 +223,7 @@ Mono<ResponseEntity<ModelApiResponse>> uploadFile(
223223
Mono<ResponseEntity<ModelApiResponse>> uploadFileWithRequiredFile(
224224
@PathVariable("petId") Long petId,
225225
@RequestPart(value = "requiredFile", required = true) Part requiredFile,
226-
@RequestPart(value = "additionalMetadata", required = false) String /* String */ additionalMetadata
226+
@RequestPart(value = "additionalMetadata", required = false) String additionalMetadata
227227
);
228228

229229
}

samples/server/petstore/springboot-reactive-noResponseEntity/src/main/java/org/openapitools/api/FakeApi.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -681,7 +681,7 @@ default Mono<Integer> testWithResultExample(
681681
default Mono<ModelApiResponse> uploadFileWithRequiredFile(
682682
@NotNull @ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId,
683683
@ApiParam(value = "file to upload", required = true) @RequestPart(value = "requiredFile", required = true) Part requiredFile,
684-
@ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String /* String */ additionalMetadata,
684+
@ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata,
685685
@ApiIgnore final ServerWebExchange exchange
686686
) {
687687
return getDelegate().uploadFileWithRequiredFile(petId, requiredFile, additionalMetadata, exchange);

samples/server/petstore/springboot-reactive-noResponseEntity/src/main/java/org/openapitools/api/PetApi.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -356,7 +356,7 @@ default Mono<Void> updatePetWithForm(
356356
@ResponseStatus(HttpStatus.OK)
357357
default Mono<ModelApiResponse> uploadFile(
358358
@NotNull @ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId,
359-
@ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String /* String */ additionalMetadata,
359+
@ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata,
360360
@ApiParam(value = "file to upload") @RequestPart(value = "file", required = false) Part file,
361361
@ApiIgnore final ServerWebExchange exchange
362362
) {

samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/FakeApi.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -663,7 +663,7 @@ default Mono<ResponseEntity<Integer>> testWithResultExample(
663663
default Mono<ResponseEntity<ModelApiResponse>> uploadFileWithRequiredFile(
664664
@NotNull @ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId,
665665
@ApiParam(value = "file to upload", required = true) @RequestPart(value = "requiredFile", required = true) Part requiredFile,
666-
@ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String /* String */ additionalMetadata,
666+
@ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata,
667667
@ApiIgnore final ServerWebExchange exchange
668668
) {
669669
return getDelegate().uploadFileWithRequiredFile(petId, requiredFile, additionalMetadata, exchange);

samples/server/petstore/springboot-reactive/src/main/java/org/openapitools/api/PetApi.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -348,7 +348,7 @@ default Mono<ResponseEntity<Void>> updatePetWithForm(
348348
)
349349
default Mono<ResponseEntity<ModelApiResponse>> uploadFile(
350350
@NotNull @ApiParam(value = "ID of pet to update", required = true) @PathVariable("petId") Long petId,
351-
@ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String /* String */ additionalMetadata,
351+
@ApiParam(value = "Additional data to pass to server") @Valid @RequestPart(value = "additionalMetadata", required = false) String additionalMetadata,
352352
@ApiParam(value = "file to upload") @RequestPart(value = "file", required = false) Part file,
353353
@ApiIgnore final ServerWebExchange exchange
354354
) {

0 commit comments

Comments
 (0)