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 bfc8dbbb63c2..f6ad69a7f824 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 @@ -17,7 +17,6 @@ package org.openapitools.codegen; -import com.fasterxml.jackson.core.JsonProcessingException; import com.google.common.base.CaseFormat; import com.google.common.collect.ImmutableMap; import com.samskivert.mustache.Mustache; @@ -2303,7 +2302,6 @@ public CodegenProperty fromProperty(String name, Schema p) { // property.baseType = getSimpleRef(p.get$ref()); //} // --END of revision - property.isModel = ModelUtils.isModel(p); setNonArrayMapProperty(property, type); } @@ -3129,9 +3127,6 @@ public CodegenParameter fromParameter(Parameter parameter, Set imports) } else { codegenParameter.dataType = codegenProperty.dataType; } - if (ModelUtils.isObjectSchema(parameterSchema)) { - codegenProperty.complexType = codegenParameter.dataType; - } codegenParameter.dataFormat = codegenProperty.dataFormat; codegenParameter.required = codegenProperty.required; @@ -3318,10 +3313,6 @@ public CodegenParameter fromParameter(Parameter parameter, Set imports) * @return data type */ protected String getParameterDataType(Parameter parameter, Schema schema) { - if (parameter.get$ref() != null) { - String refName = ModelUtils.getSimpleRef(parameter.get$ref()); - return toModelName(refName); - } return null; } diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/utils/ModelUtils.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/utils/ModelUtils.java index d9cc61cbc034..a57ec29aa938 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/utils/ModelUtils.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/utils/ModelUtils.java @@ -525,31 +525,6 @@ public static boolean isEmailSchema(Schema schema) { return false; } - /** - * Check to see if the schema is a model with at least one properties - * - * @param schema potentially containing a '$ref' - * @return true if it's a model with at least one properties - */ - public static boolean isModel(Schema schema) { - if (schema == null) { - LOGGER.error("Schema cannot be null in isModel check"); - return false; - } - - // has at least one property - if (schema.getProperties() != null && !schema.getProperties().isEmpty()) { - return true; - } - - // composed schema is a model - if (schema instanceof ComposedSchema) { - return true; - } - - return false; - } - /** * Check to see if the schema is a free form object * diff --git a/modules/openapi-generator/src/main/resources/JavaSpring/queryParams.mustache b/modules/openapi-generator/src/main/resources/JavaSpring/queryParams.mustache index 9bf214630797..c6db115f6ee3 100644 --- a/modules/openapi-generator/src/main/resources/JavaSpring/queryParams.mustache +++ b/modules/openapi-generator/src/main/resources/JavaSpring/queryParams.mustache @@ -1 +1 @@ -{{#isQueryParam}}{{#useBeanValidation}}{{>beanValidationQueryParams}}{{/useBeanValidation}}@ApiParam(value = "{{{description}}}"{{#required}}, required = true{{/required}}{{#allowableValues}}, allowableValues = "{{#values}}{{{.}}}{{^-last}}, {{/-last}}{{#-last}}{{/-last}}{{/values}}"{{/allowableValues}}{{^isContainer}}{{#defaultValue}}, defaultValue = {{^isString}}"{{/isString}}{{#isString}}{{#isEnum}}"{{/isEnum}}{{/isString}}{{{defaultValue}}}{{^isString}}"{{/isString}}{{#isString}}{{#isEnum}}"{{/isEnum}}{{/isString}}{{/defaultValue}}{{/isContainer}}) {{#useBeanValidation}}@Valid{{/useBeanValidation}}{{^isModel}} @RequestParam(value = "{{baseName}}"{{#required}}, required = true{{/required}}{{^required}}, required = false{{/required}}{{^isContainer}}{{#defaultValue}}, defaultValue={{^isString}}"{{/isString}}{{#isString}}{{#isEnum}}"{{/isEnum}}{{/isString}}{{{defaultValue}}}{{^isString}}"{{/isString}}{{#isString}}{{#isEnum}}"{{/isEnum}}{{/isString}}{{/defaultValue}}{{/isContainer}}){{/isModel}} {{>optionalDataType}} {{paramName}}{{/isQueryParam}} \ No newline at end of file +{{#isQueryParam}}{{#useBeanValidation}}{{>beanValidationQueryParams}}{{/useBeanValidation}}@ApiParam(value = "{{{description}}}"{{#required}}, required = true{{/required}}{{#allowableValues}}, allowableValues = "{{#values}}{{{.}}}{{^-last}}, {{/-last}}{{#-last}}{{/-last}}{{/values}}"{{/allowableValues}}{{^isContainer}}{{#defaultValue}}, defaultValue = {{^isString}}"{{/isString}}{{#isString}}{{#isEnum}}"{{/isEnum}}{{/isString}}{{{defaultValue}}}{{^isString}}"{{/isString}}{{#isString}}{{#isEnum}}"{{/isEnum}}{{/isString}}{{/defaultValue}}{{/isContainer}}) {{#useBeanValidation}}@Valid{{/useBeanValidation}}{{#isPrimitiveType}} @RequestParam(value = "{{baseName}}"{{#required}}, required = true{{/required}}{{^required}}, required = false{{/required}}{{^isContainer}}{{#defaultValue}}, defaultValue={{^isString}}"{{/isString}}{{#isString}}{{#isEnum}}"{{/isEnum}}{{/isString}}{{{defaultValue}}}{{^isString}}"{{/isString}}{{#isString}}{{#isEnum}}"{{/isEnum}}{{/isString}}{{/defaultValue}}{{/isContainer}}){{/isPrimitiveType}} {{>optionalDataType}} {{paramName}}{{/isQueryParam}} \ No newline at end of file diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java index 9dbb5bb5c134..0d7cf21cd831 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java @@ -836,21 +836,6 @@ private Map codegenModelWithXEnumVarName() { return objs; } - @Test - public void objectQueryParamIdentifyAsObject() { - final OpenAPI openAPI = TestUtils.parseSpec("src/test/resources/3_0/objectQueryParam.yaml"); - new InlineModelResolver().flatten(openAPI); - final DefaultCodegen codegen = new DefaultCodegen(); - codegen.setOpenAPI(openAPI); - - Set imports = new HashSet<>(); - CodegenParameter parameter = codegen.fromParameter(openAPI.getPaths().get("/pony").getGet().getParameters().get(0), imports); - - Assert.assertEquals(parameter.dataType, "PageQuery"); - Assert.assertEquals(imports.size(), 1); - Assert.assertEquals(imports.iterator().next(), "PageQuery"); - } - @Test public void mapParamImportInnerObject() { final OpenAPI openAPI = TestUtils.parseSpec("src/test/resources/2_0/mapArgs.yaml"); diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/spring/SpringCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/spring/SpringCodegenTest.java index 578b485e8d1c..90a3ed88003c 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/spring/SpringCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/spring/SpringCodegenTest.java @@ -151,15 +151,15 @@ public void doNotGenerateRequestParamForObjectQueryParam() throws IOException { String outputPath = output.getAbsolutePath().replace('\\', '/'); OpenAPI openAPI = new OpenAPIParser() - .readLocation("src/test/resources/3_0/objectQueryParam.yaml", null, new ParseOptions()).getOpenAPI(); + .readLocation("src/test/resources/3_0/objectQueryParam.yaml", null, new ParseOptions()).getOpenAPI(); SpringCodegen codegen = new SpringCodegen(); codegen.setOutputDir(output.getAbsolutePath()); codegen.additionalProperties().put(CXFServerFeatures.LOAD_TEST_DATA_FROM_FILE, "true"); ClientOptInput input = new ClientOptInput(); - input.setOpenAPI(openAPI); - input.setConfig(codegen); + input.openAPI(openAPI); + input.config(codegen); MockDefaultGenerator generator = new MockDefaultGenerator(); generator.opts(input).generate(); @@ -174,6 +174,44 @@ private void checkFileNotContains(MockDefaultGenerator generator, String path, S assertFalse(file.contains(line)); } + @Test + public void doGenerateRequestParamForSimpleParam() throws IOException { + File output = Files.createTempDirectory("test").toFile().getCanonicalFile(); + output.deleteOnExit(); + String outputPath = output.getAbsolutePath().replace('\\', '/'); + + OpenAPI openAPI = new OpenAPIParser() + .readLocation("src/test/resources/3_0/issue_3248.yaml", null, new ParseOptions()).getOpenAPI(); + + SpringCodegen codegen = new SpringCodegen(); + codegen.setOutputDir(output.getAbsolutePath()); + codegen.additionalProperties().put(CXFServerFeatures.LOAD_TEST_DATA_FROM_FILE, "true"); + + ClientOptInput input = new ClientOptInput(); + input.openAPI(openAPI); + input.config(codegen); + + MockDefaultGenerator generator = new MockDefaultGenerator(); + generator.opts(input).generate(); + + checkFileContains(generator, outputPath + "/src/main/java/org/openapitools/api/MonkeysApi.java", "@RequestParam"); + checkFileContains(generator, outputPath + "/src/main/java/org/openapitools/api/ElephantsApi.java", "@RequestParam"); + checkFileContains(generator, outputPath + "/src/main/java/org/openapitools/api/ZebrasApi.java", "@RequestParam"); + checkFileContains(generator, outputPath + "/src/main/java/org/openapitools/api/BearsApi.java", "@RequestParam"); + checkFileContains(generator, outputPath + "/src/main/java/org/openapitools/api/CamelsApi.java", "@RequestParam"); + checkFileContains(generator, outputPath + "/src/main/java/org/openapitools/api/PandasApi.java", "@RequestParam"); + checkFileContains(generator, outputPath + "/src/main/java/org/openapitools/api/CrocodilesApi.java", "@RequestParam"); + checkFileContains(generator, outputPath + "/src/main/java/org/openapitools/api/PolarBearsApi.java", "@RequestParam"); + + } + + private void checkFileContains(MockDefaultGenerator generator, String path, String... lines) { + String file = generator.getFiles().get(path); + assertNotNull(file); + for (String line : lines) + assertTrue(file.contains(line)); + } + @Test public void clientOptsUnicity() { SpringCodegen codegen = new SpringCodegen(); diff --git a/modules/openapi-generator/src/test/resources/3_0/issue_3248.yaml b/modules/openapi-generator/src/test/resources/3_0/issue_3248.yaml new file mode 100644 index 000000000000..9c90a9e23616 --- /dev/null +++ b/modules/openapi-generator/src/test/resources/3_0/issue_3248.yaml @@ -0,0 +1,121 @@ +openapi: 3.0.0 +servers: + - url: 'localhost:8080' +info: + version: 1.0.0 + title: OpenAPI Petstore + license: + name: Apache-2.0 + url: 'http://www.apache.org/licenses/LICENSE-2.0.html' +paths: + /monkeys: + get: + operationId: getMonkeys + parameters: + - $ref: '#/components/parameters/refDate' + /elephants: + get: + operationId: getElephants + parameters: + - in: query + name: someDate + required: true + schema: + type: string + format: date + /girafes: + get: + operationId: getGirafes + parameters: + - $ref: '#/components/parameters/refStatus' + /zebras: + get: + operationId: getZebras + parameters: + - in: query + name: status + required: true + schema: + type: integer + enum: [0,1] + default: 0 + /bears: + get: + operationId: getBears + parameters: + - $ref: '#/components/parameters/refCondition' + /camels: + get: + operationId: getCamels + parameters: + - in: query + name: condition + required: true + schema: + type: string + enum: + - sleeping + - awake + /pandas: + get: + operationId: getPandas + parameters: + - $ref: '#/components/parameters/refName' + /crocodiles: + get: + operationId: getCrocodiles + parameters: + - in: query + name: name + required: true + schema: + type: string + /polarBears: + get: + operationId: getPolarBears + parameters: + - $ref: '#/components/parameters/refAge' + /birds: + get: + operationId: getBirds + parameters: + - in: query + name: age + required: true + schema: + type: integer +components: + parameters: + refDate: + in: query + name: refDate + required: true + schema: + type: string + format: date + refStatus: + in: query + name: refStatus + required: true + schema: + type: integer + enum: [0,1] + default: 0 + refCondition: + in: query + name: refCondition + schema: + type: string + enum: + - sleeping + - awake + refName: + in: query + name: refName + schema: + type: string + refAge: + in: query + name: refAge + schema: + type: integer \ No newline at end of file