Skip to content

Commit 92263d7

Browse files
committed
fix: do not generate no arg constructor with non nullable fields
1 parent d39e015 commit 92263d7

2 files changed

Lines changed: 34 additions & 6 deletions

File tree

modules/openapi-generator/src/main/resources/JavaSpring/pojo.mustache

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -89,11 +89,13 @@ public {{>sealed}}class {{classname}}{{#parent}} extends {{{parent}}}{{/parent}}
8989
{{/isContainer}}
9090
{{/vars}}
9191
{{#vendorExtensions.x-java-no-args-constructor}}
92+
{{^openApiNullable}}
9293

93-
public {{classname}}() {
94-
super();
95-
}
96-
{{/vendorExtensions.x-java-no-args-constructor}}
94+
public {{classname}}() {
95+
super();
96+
}
97+
{{/openApiNullable}}
98+
{{/vendorExtensions.x-java-no-args-constructor}}
9799
{{^lombok.Data}}
98100
{{^lombok.RequiredArgsConstructor}}
99101
{{#generatedConstructorWithRequiredArgs}}

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

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2877,11 +2877,12 @@ public void shouldUseTheSameTagNameForTheInterfaceAndTheMethod_issue11570() thro
28772877
}
28782878

28792879
@Test
2880-
public void shouldGenerateConstructorWithOnlyRequiredParameters() throws IOException {
2880+
public void shouldGenerateConstructorWithOnlyRequiredParametersAndNoArgConstructorWithOpenApiNullable() throws IOException {
28812881
final Map<String, File> output = generateFromContract(
28822882
"src/test/resources/3_0/spring/issue_9789.yml",
28832883
SPRING_BOOT,
2884-
Map.of(GENERATE_CONSTRUCTOR_WITH_ALL_ARGS, "false")
2884+
Map.of(GENERATE_CONSTRUCTOR_WITH_ALL_ARGS, "false",
2885+
OPENAPI_NULLABLE, "false")
28852886
);
28862887

28872888
JavaFileAssert.assertThat(output.get("ObjectWithNoRequiredParameter.java")).hasNoConstructor("String");
@@ -2899,6 +2900,30 @@ public void shouldGenerateConstructorWithOnlyRequiredParameters() throws IOExcep
28992900
.bodyContainsLines("super(param2, param3)", "this.param6 = param6");
29002901
}
29012902

2903+
@Test
2904+
public void shouldGenerateConstructorWithOnlyRequiredParametersWhenNoOpenapiNullable() throws IOException {
2905+
final Map<String, File> output = generateFromContract(
2906+
"src/test/resources/3_0/spring/issue_9789.yml",
2907+
SPRING_BOOT,
2908+
Map.of(GENERATE_CONSTRUCTOR_WITH_ALL_ARGS, "false",
2909+
OPENAPI_NULLABLE, "true")
2910+
);
2911+
2912+
JavaFileAssert.assertThat(output.get("ObjectWithNoRequiredParameter.java")).hasNoConstructor("String");
2913+
2914+
JavaFileAssert.assertThat(output.get("ObjectWithRequiredParameter.java")).hasNoConstructor();
2915+
JavaFileAssert.assertThat(output.get("ObjectWithRequiredParameter.java")).assertConstructor("String", "String")
2916+
.hasParameter("param2").toConstructor()
2917+
.hasParameter("param3");
2918+
2919+
JavaFileAssert.assertThat(output.get("ObjectWithInheritedRequiredParameter.java")).hasNoConstructor();
2920+
JavaFileAssert.assertThat(output.get("ObjectWithInheritedRequiredParameter.java")).assertConstructor("Integer", "String", "String")
2921+
.hasParameter("param2").toConstructor()
2922+
.hasParameter("param3").toConstructor()
2923+
.hasParameter("param6").toConstructor()
2924+
.bodyContainsLines("super(param2, param3)", "this.param6 = param6");
2925+
}
2926+
29022927
private Map<String, File> generateFromContract(String url, String library) throws IOException {
29032928
return generateFromContract(url, library, new HashMap<>());
29042929
}
@@ -4958,6 +4983,7 @@ public void testLombokAnnotations() throws IOException {
49584983
.hasNoMethod("setName")
49594984
;
49604985
additionalProperties.put(AbstractJavaCodegen.ADDITIONAL_MODEL_TYPE_ANNOTATIONS, "@lombok.ToString");
4986+
additionalProperties.put(AbstractJavaCodegen.OPENAPI_NULLABLE, "false");
49614987
output = generateFromContract("src/test/resources/3_0/petstore.yaml", SPRING_BOOT, additionalProperties);
49624988
JavaFileAssert.assertThat(output.get("Pet.java"))
49634989
.assertConstructor().toFileAssert()

0 commit comments

Comments
 (0)