Skip to content

Commit 146c1fb

Browse files
Zomzogjimschubert
authored andcommitted
Link query parameter to model object (#2710)
* Link query parameter to model object Must fix #2655 * Fix import
1 parent 0d701b7 commit 146c1fb

5 files changed

Lines changed: 96 additions & 1 deletion

File tree

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2210,6 +2210,7 @@ public CodegenProperty fromProperty(String name, Schema p) {
22102210
// property.baseType = getSimpleRef(p.get$ref());
22112211
//}
22122212
// --END of revision
2213+
property.isModel = ModelUtils.isModel(p);
22132214
setNonArrayMapProperty(property, type);
22142215
}
22152216

@@ -3035,6 +3036,9 @@ public CodegenParameter fromParameter(Parameter parameter, Set<String> imports)
30353036
} else {
30363037
codegenParameter.dataType = codegenProperty.dataType;
30373038
}
3039+
if (ModelUtils.isObjectSchema(parameterSchema)) {
3040+
codegenProperty.complexType = codegenParameter.dataType;
3041+
}
30383042
codegenParameter.dataFormat = codegenProperty.dataFormat;
30393043
codegenParameter.required = codegenProperty.required;
30403044

@@ -3221,6 +3225,10 @@ public CodegenParameter fromParameter(Parameter parameter, Set<String> imports)
32213225
* @return data type
32223226
*/
32233227
protected String getParameterDataType(Parameter parameter, Schema schema) {
3228+
if (parameter.get$ref() != null) {
3229+
String refName = ModelUtils.getSimpleRef(parameter.get$ref());
3230+
return toModelName(refName);
3231+
}
32243232
return null;
32253233
}
32263234

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +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}} @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}}) {{>optionalDataType}} {{paramName}}{{/isQueryParam}}
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}}

modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -622,4 +622,20 @@ private Map<String, Object> codegenModelWithXEnumVarName() {
622622
Map<String, Object> objs = Collections.singletonMap("models", Collections.singletonList(Collections.singletonMap("model", cm)));
623623
return objs;
624624
}
625+
626+
@Test
627+
public void objectQueryParamIdentifyAsObject() {
628+
final OpenAPI openAPI = TestUtils.parseSpec("src/test/resources/3_0/objectQueryParam.yaml");
629+
new InlineModelResolver().flatten(openAPI);
630+
final DefaultCodegen codegen = new DefaultCodegen();
631+
codegen.setOpenAPI(openAPI);
632+
633+
Set<String> imports = new HashSet<>();
634+
CodegenParameter parameter = codegen.fromParameter(openAPI.getPaths().get("/pony").getGet().getParameters().get(0), imports);
635+
636+
Assert.assertEquals(parameter.dataType, "PageQuery");
637+
Assert.assertEquals(imports.size(), 1);
638+
Assert.assertEquals(imports.iterator().next(), "PageQuery");
639+
}
640+
625641
}

modules/openapi-generator/src/test/java/org/openapitools/codegen/java/spring/SpringCodegenTest.java

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,27 @@
1717

1818
package org.openapitools.codegen.java.spring;
1919

20+
import io.swagger.parser.OpenAPIParser;
2021
import io.swagger.v3.oas.models.OpenAPI;
2122
import io.swagger.v3.oas.models.info.Info;
2223
import io.swagger.v3.oas.models.servers.Server;
24+
import io.swagger.v3.parser.core.models.ParseOptions;
25+
import org.openapitools.codegen.ClientOptInput;
26+
import org.openapitools.codegen.ClientOpts;
2327
import org.openapitools.codegen.CodegenConstants;
28+
import org.openapitools.codegen.MockDefaultGenerator;
2429
import org.openapitools.codegen.languages.SpringCodegen;
30+
import org.openapitools.codegen.languages.features.CXFServerFeatures;
2531
import org.testng.Assert;
2632
import org.testng.annotations.Test;
2733

34+
import java.io.File;
35+
import java.io.IOException;
36+
import java.nio.file.Files;
37+
38+
import static org.testng.Assert.assertFalse;
39+
import static org.testng.Assert.assertNotNull;
40+
2841
import static org.openapitools.codegen.languages.SpringCodegen.RESPONSE_WRAPPER;
2942

3043
public class SpringCodegenTest {
@@ -122,4 +135,37 @@ public void interfaceDefaultImplDisableWithReponseWrapper() {
122135

123136
Assert.assertEquals(codegen.additionalProperties().get("jdk8"), false);
124137
}
138+
139+
@Test
140+
public void doNotGenerateRequestParamForObjectQueryParam() throws IOException {
141+
File output = Files.createTempDirectory("test").toFile().getCanonicalFile();
142+
output.deleteOnExit();
143+
String outputPath = output.getAbsolutePath().replace('\\', '/');
144+
145+
OpenAPI openAPI = new OpenAPIParser()
146+
.readLocation("src/test/resources/3_0/objectQueryParam.yaml", null, new ParseOptions()).getOpenAPI();
147+
148+
SpringCodegen codegen = new SpringCodegen();
149+
codegen.setOutputDir(output.getAbsolutePath());
150+
151+
ClientOpts opts = new ClientOpts();
152+
opts.getProperties().put(CXFServerFeatures.LOAD_TEST_DATA_FROM_FILE, "true");
153+
154+
ClientOptInput input = new ClientOptInput();
155+
input.setOpenAPI(openAPI);
156+
input.setConfig(codegen);
157+
input.setOpts(opts);
158+
159+
MockDefaultGenerator generator = new MockDefaultGenerator();
160+
generator.opts(input).generate();
161+
162+
checkFileNotContains(generator, outputPath + "/src/main/java/org/openapitools/api/PonyApi.java", "@RequestParam");
163+
}
164+
165+
private void checkFileNotContains(MockDefaultGenerator generator, String path, String... lines) {
166+
String file = generator.getFiles().get(path);
167+
assertNotNull(file);
168+
for (String line : lines)
169+
assertFalse(file.contains(line));
170+
}
125171
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
openapi: 3.0.0
2+
servers:
3+
- url: 'localhost:8080'
4+
info:
5+
version: 1.0.0
6+
title: OpenAPI Petstore
7+
license:
8+
name: Apache-2.0
9+
url: 'http://www.apache.org/licenses/LICENSE-2.0.html'
10+
paths:
11+
/pony:
12+
get:
13+
operationId: list
14+
parameters:
15+
- in: query
16+
name: pageQuery
17+
schema:
18+
type: object
19+
properties:
20+
offset:
21+
type: integer
22+
format: int32
23+
limit:
24+
type: integer
25+
format: int32

0 commit comments

Comments
 (0)