diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java index 17eae742c6b..48ee109c972 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java @@ -2226,7 +2226,12 @@ public class DefaultCodegen implements CodegenConfig { if (StringUtils.isNotBlank(requestBody.get$ref())) { requestBody = openAPI.getComponents().getRequestBodies().get(getSimpleRef(requestBody.get$ref())); } - bodyParam = fromRequestBody(requestBody, schemas, imports); + + String bodyParameterName = ""; + if (op.vendorExtensions != null && op.vendorExtensions.containsKey("x-codegen-body-parameter-name")) { + bodyParameterName = (String) op.vendorExtensions.get("x-codegen-body-parameter-name"); + } + bodyParam = fromRequestBody(requestBody, schemas, imports, bodyParameterName); bodyParam.description = requestBody.getDescription(); postProcessParameter(bodyParam); @@ -4172,7 +4177,7 @@ public class DefaultCodegen implements CodegenConfig { return codegenParameter; } - public CodegenParameter fromRequestBody(RequestBody body, Map schemas, Set imports) { + public CodegenParameter fromRequestBody(RequestBody body, Map schemas, Set imports, String bodyParameterName) { if (body == null) { LOGGER.error("body in fromRequestBody cannot be null!"); } @@ -4197,9 +4202,14 @@ public class DefaultCodegen implements CodegenConfig { schema.setName(name); codegenModel = fromModel(name, schema, schemas); } + if (codegenModel != null && !codegenModel.emptyVars) { - codegenParameter.baseName = codegenModel.classname; - codegenParameter.paramName = toParamName(codegenModel.classname); + if (StringUtils.isEmpty(bodyParameterName)) { + codegenParameter.baseName = codegenModel.classname; + } else { + codegenParameter.baseName = bodyParameterName; + } + codegenParameter.paramName = toParamName(codegenParameter.baseName); codegenParameter.baseType = codegenModel.classname; codegenParameter.dataType = getTypeDeclaration(codegenModel.classname); codegenParameter.description = codegenModel.description; @@ -4249,8 +4259,13 @@ public class DefaultCodegen implements CodegenConfig { mostInnerItem = innerCp; innerCp = innerCp.items; } - codegenParameter.baseName = mostInnerItem.complexType; - codegenParameter.paramName = toArrayModelParamName(mostInnerItem.complexType); + + if (StringUtils.isEmpty(bodyParameterName)) { + codegenParameter.baseName = mostInnerItem.complexType; + } else { + codegenParameter.baseName = bodyParameterName; + } + codegenParameter.paramName = toArrayModelParamName(codegenParameter.baseName); codegenParameter.items = codegenProperty.items; codegenParameter.dataType = getTypeDeclaration(arraySchema); codegenParameter.baseType = getSchemaType(arraySchema); @@ -4273,8 +4288,12 @@ public class DefaultCodegen implements CodegenConfig { // only support 1-dimension map only imports.add(codegenProperty.baseType); - codegenParameter.baseName = "request_body"; - codegenParameter.paramName = toParamName("request_body"); + if (StringUtils.isEmpty(bodyParameterName)) { + codegenParameter.baseName = "request_body"; + } else { + codegenParameter.baseName = bodyParameterName; + } + codegenParameter.paramName = toParamName(codegenParameter.baseName); codegenParameter.items = codegenProperty.items; codegenParameter.dataType = getTypeDeclaration(inner); codegenParameter.baseType = getSchemaType(inner); @@ -4286,10 +4305,10 @@ public class DefaultCodegen implements CodegenConfig { // HTTP request body is primitive type (e.g. integer, string, etc) CodegenProperty codegenProperty = fromProperty("PRIMITIVE_REQUEST_BODY", schema); if (codegenProperty != null) { - if (schema.getExtensions() != null && schema.getExtensions().containsKey("x-codegen-body-parameter-name")) { - codegenParameter.baseName = (String) schema.getExtensions().get("x-codegen-body-parameter-name"); + if (StringUtils.isEmpty(bodyParameterName)) { + codegenParameter.baseName = "body"; // default to body } else { - codegenParameter.baseName = "body"; // default to body + codegenParameter.baseName = bodyParameterName; } codegenParameter.isPrimitiveType = true; codegenParameter.baseType = codegenProperty.baseType; diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaClientCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaClientCodegenTest.java index a5267caf175..1d1814d0a20 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaClientCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaClientCodegenTest.java @@ -145,7 +145,7 @@ public class JavaClientCodegenTest { RequestBody body1 = new RequestBody(); body1.setDescription("A list of ids"); body1.setContent(new Content().addMediaType("application/json", new MediaType().schema(new ArraySchema().items(new StringSchema())))); - CodegenParameter codegenParameter1 = codegen.fromRequestBody(body1 , new HashMap(), new HashSet()); + CodegenParameter codegenParameter1 = codegen.fromRequestBody(body1 , new HashMap(), new HashSet(), null); Assert.assertEquals(codegenParameter1.description, "A list of ids"); Assert.assertEquals(codegenParameter1.dataType, "List"); Assert.assertEquals(codegenParameter1.baseType, "List"); @@ -153,7 +153,7 @@ public class JavaClientCodegenTest { RequestBody body2 = new RequestBody(); body2.setDescription("A list of list of values"); body2.setContent(new Content().addMediaType("application/json", new MediaType().schema(new ArraySchema().items(new ArraySchema().items(new IntegerSchema()))))); - CodegenParameter codegenParameter2 = codegen.fromRequestBody(body2 , new HashMap(), new HashSet()); + CodegenParameter codegenParameter2 = codegen.fromRequestBody(body2 , new HashMap(), new HashSet(), null); Assert.assertEquals(codegenParameter2.description, "A list of list of values"); Assert.assertEquals(codegenParameter2.dataType, "List>"); Assert.assertEquals(codegenParameter2.baseType, "List"); @@ -165,7 +165,7 @@ public class JavaClientCodegenTest { point.addProperties("message", new StringSchema()); point.addProperties("x", new IntegerSchema().format(SchemaTypeUtil.INTEGER32_FORMAT)); point.addProperties("y", new IntegerSchema().format(SchemaTypeUtil.INTEGER32_FORMAT)); - CodegenParameter codegenParameter3 = codegen.fromRequestBody(body3 , Collections.singletonMap("Point", point), new HashSet()); + CodegenParameter codegenParameter3 = codegen.fromRequestBody(body3 , Collections.singletonMap("Point", point), new HashSet(), null); Assert.assertEquals(codegenParameter3.description, "A list of points"); Assert.assertEquals(codegenParameter3.dataType, "List"); Assert.assertEquals(codegenParameter3.baseType, "List");