Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -1155,10 +1155,30 @@ public Map<String, ModelsMap> postProcessAllModels(Map<String, ModelsMap> objs)
// conditionally force the generation of no args constructor
for (CodegenModel cm : allModels.values()) {
boolean hasLombokNoArgsConstructor = lombokAnnotations != null && lombokAnnotations.containsKey("NoArgsConstructor");
boolean hasAllArgsConstructor = cm.vendorExtensions.containsKey("x-java-all-args-constructor");
if (!hasLombokNoArgsConstructor
&& (cm.hasRequired || cm.vendorExtensions.containsKey("x-java-all-args-constructor"))) {
&& (cm.hasRequired || hasAllArgsConstructor)) {
cm.vendorExtensions.put("x-java-no-args-constructor", true);
}


// add @JsonCreator on constructor
if (!this.withXml && jackson) {
if (hasAllArgsConstructor) {
// add @JsonCreator and @JsonProperty on the all argument constructor
cm.vendorExtensions.put("java-all-args-constructor-jsoncreator", true);
List<CodegenProperty> properties = (List<CodegenProperty>)cm.vendorExtensions.get("x-java-all-args-constructor-vars");
properties.forEach(p -> p.vendorExtensions.put("x-java-all-args-jsonProperty", p.baseName));
} else if (this.generatedConstructorWithRequiredArgs && cm.hasRequired && cm.requiredVars.size() == cm.allVars.size()) {
/* add @JsonCreator and @JsonProperty on the required argument constructor
* all fields are initialzed in the required constructor
* no all arg constructor
*/
cm.vendorExtensions.put("x-java-required-constructor-jsoncreator", true);
cm.requiredVars.forEach(p -> p.vendorExtensions.put("x-java-required-args-jsonProperty", p.baseName));
}
}

}
return objs;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,10 @@ public {{>sealed}}class {{classname}}{{#parent}} extends {{{parent}}}{{/parent}}
/**
* Constructor with only required parameters{{#generateConstructorWithAllArgs}}{{^vendorExtensions.x-java-all-args-constructor}} and all parameters{{/vendorExtensions.x-java-all-args-constructor}}{{/generateConstructorWithAllArgs}}
*/
public {{classname}}({{#requiredVars}}{{{datatypeWithEnum}}} {{name}}{{^-last}}, {{/-last}}{{/requiredVars}}) {
{{#vendorExtensions.x-java-required-constructor-jsoncreator}}
@JsonCreator(mode = JsonCreator.Mode.PROPERTIES)
{{/vendorExtensions.x-java-required-constructor-jsoncreator}}
public {{classname}}({{#requiredVars}}{{#vendorExtensions.x-java-required-args-jsonProperty}}@JsonProperty("{{.}}") {{/vendorExtensions.x-java-required-args-jsonProperty}}{{{datatypeWithEnum}}} {{name}}{{^-last}}, {{/-last}}{{/requiredVars}}) {
{{#parent}}
super({{#parentRequiredVars}}{{name}}{{^-last}}, {{/-last}}{{/parentRequiredVars}});
{{/parent}}
Expand All @@ -125,7 +128,10 @@ public {{>sealed}}class {{classname}}{{#parent}} extends {{{parent}}}{{/parent}}
/**
* Constructor with all args parameters
*/
public {{classname}}({{#vendorExtensions.x-java-all-args-constructor-vars}}{{>nullableAnnotation}}{{{datatypeWithEnum}}} {{name}}{{^-last}}, {{/-last}}{{/vendorExtensions.x-java-all-args-constructor-vars}}) {
{{#vendorExtensions.java-all-args-constructor-jsoncreator}}
@JsonCreator(mode = JsonCreator.Mode.PROPERTIES)
{{/vendorExtensions.java-all-args-constructor-jsoncreator}}
public {{classname}}({{#vendorExtensions.x-java-all-args-constructor-vars}}{{#vendorExtensions.x-java-all-args-jsonProperty}}@JsonProperty("{{.}}") {{/vendorExtensions.x-java-all-args-jsonProperty}}{{>nullableAnnotation}}{{{datatypeWithEnum}}} {{name}}{{^-last}}, {{/-last}}{{/vendorExtensions.x-java-all-args-constructor-vars}}) {
{{#parent}}
super({{#parentVars}}{{name}}{{^-last}}, {{/-last}}{{/parentVars}});
{{/parent}}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4833,6 +4833,8 @@ public void testAllArgsConstructor_16797_REFACTOR_ALLOF_WITH_PROPERTIES_ONLY() t
.hasParameter("requestId").toConstructor()
.hasParameter("success").toConstructor()
.hasParameter("pageInfo")
.toConstructor()
.assertConstructorAnnotations().containsWithName("JsonCreator");
;
}

Expand Down Expand Up @@ -4895,6 +4897,7 @@ public void testAllArgsConstructor_defaultOrder_15796() throws IOException {
.hasParameter("name").toConstructor()
.hasParameter("type").toConstructor()
.hasParameter("hairType").toConstructor()
.assertConstructorAnnotations().containsWithName("JsonCreator");
;
}

Expand All @@ -4910,13 +4913,20 @@ public void generateAllArgsConstructor() throws IOException {
.assertConstructor("LocalDate", "String", "String")
.hasParameter("dateOfBirth").toConstructor()
.hasParameter("name").toConstructor()
.hasParameter("type").toConstructor();
.hasParameter("type").toConstructor()
.assertConstructorAnnotations().containsWithName("JsonCreator").toConstructor()
.toFileAssert()
.assertConstructor("String")
.assertConstructorAnnotations().doesNotContainWithName("JsonCreator").toConstructor();
JavaFileAssert.assertThat(files.get("Cat.java"))
.assertConstructor("Integer", "String", "LocalDate", "String", "String");

// test required constructor
JavaFileAssert.assertThat(files.get("Page.java"))
.assertConstructor("Integer")
.assertConstructorAnnotations().containsWithName("JsonCreator")
.toConstructor()
.assertConstructorAnnotations().containsWithName("JsonCreator").toConstructor()
.toFileAssert()
.fileContains("Constructor with only required parameters and all parameters");

Expand Down Expand Up @@ -5353,14 +5363,14 @@ public void shouldAnnotateNonRequiredFieldsAsNullable() throws IOException {
JavaFileAssert.assertThat(file)
.fileContains(
"public Item(" +
"String mandatoryName," +
" @Nullable String optionalDescription," +
" String optionalOneWithDefault," +
" String nullableStr," +
" List<String> mandatoryContainer," +
" List<String> optionalContainer," +
" List<String> optionalContainerWithDefault," +
" List<String> nullableContainer)"
"@JsonProperty(\"mandatoryName\") String mandatoryName," +
" @JsonProperty(\"optionalDescription\") @Nullable String optionalDescription," +
" @JsonProperty(\"optionalOneWithDefault\") String optionalOneWithDefault," +
" @JsonProperty(\"nullableStr\") String nullableStr," +
" @JsonProperty(\"mandatoryContainer\") List<String> mandatoryContainer," +
" @JsonProperty(\"optionalContainer\") List<String> optionalContainer," +
" @JsonProperty(\"optionalContainerWithDefault\") List<String> optionalContainerWithDefault," +
" @JsonProperty(\"nullableContainer\") List<String> nullableContainer)"
);
}

Expand Down Expand Up @@ -5388,10 +5398,10 @@ public void shouldAnnotateNonRequiredFieldsAsNullableWhenSetContainerDefaultToNu
.doesNotHaveAnnotation("Nullable");
JavaFileAssert.assertThat(file)
.fileContains(
", List<String> mandatoryContainer," +
" @Nullable List<String> optionalContainer," +
" List<String> optionalContainerWithDefault," +
" List<String> nullableContainer)"
", @JsonProperty(\"mandatoryContainer\") List<String> mandatoryContainer," +
" @JsonProperty(\"optionalContainer\") @Nullable List<String> optionalContainer," +
" @JsonProperty(\"optionalContainerWithDefault\") List<String> optionalContainerWithDefault," +
" @JsonProperty(\"nullableContainer\") List<String> nullableContainer)"
);
}

Expand Down Expand Up @@ -5419,8 +5429,8 @@ public void shouldNotAnnotateNonRequiredFieldsAsNullableWhileUseOptional() throw
.doesNotHaveAnnotation("Nullable");
JavaFileAssert.assertThat(file)
.fileContains(
"public Item(String mandatoryName, String optionalDescription," +
" String optionalOneWithDefault, String nullableStr"
"public Item(@JsonProperty(\"mandatoryName\") String mandatoryName, @JsonProperty(\"optionalDescription\") String optionalDescription," +
" @JsonProperty(\"optionalOneWithDefault\") String optionalOneWithDefault, @JsonProperty(\"nullableStr\") String nullableStr"
);
}

Expand Down Expand Up @@ -5462,10 +5472,10 @@ public void shouldAnnotateNonRequiredFieldsAsNullableWhileNotUsingOpenApiNullabl

JavaFileAssert.assertThat(file)
.fileContains(
" List<String> mandatoryContainer," +
" @Nullable List<String> optionalContainer," +
" List<String> optionalContainerWithDefault," +
" @Nullable List<String> nullableContainer)"
" @JsonProperty(\"mandatoryContainer\") List<String> mandatoryContainer," +
" @JsonProperty(\"optionalContainer\") @Nullable List<String> optionalContainer," +
" @JsonProperty(\"optionalContainerWithDefault\") List<String> optionalContainerWithDefault," +
" @JsonProperty(\"nullableContainer\") @Nullable List<String> nullableContainer)"
);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,8 @@ public TypeHolderDefault() {
/**
* Constructor with only required parameters
*/
public TypeHolderDefault(String stringItem, BigDecimal numberItem, Integer integerItem, Boolean boolItem, List<Integer> arrayItem) {
@JsonCreator(mode = JsonCreator.Mode.PROPERTIES)
public TypeHolderDefault(@JsonProperty("string_item") String stringItem, @JsonProperty("number_item") BigDecimal numberItem, @JsonProperty("integer_item") Integer integerItem, @JsonProperty("bool_item") Boolean boolItem, @JsonProperty("array_item") List<Integer> arrayItem) {
this.stringItem = stringItem;
this.numberItem = numberItem;
this.integerItem = integerItem;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,8 @@ public TypeHolderExample() {
/**
* Constructor with only required parameters
*/
public TypeHolderExample(String stringItem, BigDecimal numberItem, Float floatItem, Integer integerItem, Boolean boolItem, List<Integer> arrayItem) {
@JsonCreator(mode = JsonCreator.Mode.PROPERTIES)
public TypeHolderExample(@JsonProperty("string_item") String stringItem, @JsonProperty("number_item") BigDecimal numberItem, @JsonProperty("float_item") Float floatItem, @JsonProperty("integer_item") Integer integerItem, @JsonProperty("bool_item") Boolean boolItem, @JsonProperty("array_item") List<Integer> arrayItem) {
this.stringItem = stringItem;
this.numberItem = numberItem;
this.floatItem = floatItem;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,8 @@ public TypeHolderDefault() {
/**
* Constructor with only required parameters
*/
public TypeHolderDefault(String stringItem, BigDecimal numberItem, Integer integerItem, Boolean boolItem, List<Integer> arrayItem) {
@JsonCreator(mode = JsonCreator.Mode.PROPERTIES)
public TypeHolderDefault(@JsonProperty("string_item") String stringItem, @JsonProperty("number_item") BigDecimal numberItem, @JsonProperty("integer_item") Integer integerItem, @JsonProperty("bool_item") Boolean boolItem, @JsonProperty("array_item") List<Integer> arrayItem) {
this.stringItem = stringItem;
this.numberItem = numberItem;
this.integerItem = integerItem;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,8 @@ public TypeHolderExample() {
/**
* Constructor with only required parameters
*/
public TypeHolderExample(String stringItem, BigDecimal numberItem, Float floatItem, Integer integerItem, Boolean boolItem, List<Integer> arrayItem) {
@JsonCreator(mode = JsonCreator.Mode.PROPERTIES)
public TypeHolderExample(@JsonProperty("string_item") String stringItem, @JsonProperty("number_item") BigDecimal numberItem, @JsonProperty("float_item") Float floatItem, @JsonProperty("integer_item") Integer integerItem, @JsonProperty("bool_item") Boolean boolItem, @JsonProperty("array_item") List<Integer> arrayItem) {
this.stringItem = stringItem;
this.numberItem = numberItem;
this.floatItem = floatItem;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,8 @@ public Apple() {
/**
* Constructor with only required parameters
*/
public Apple(Integer seeds) {
@JsonCreator(mode = JsonCreator.Mode.PROPERTIES)
public Apple(@JsonProperty("seeds") Integer seeds) {
this.seeds = seeds;
this.fruitType = fruitType;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,8 @@ public Banana() {
/**
* Constructor with only required parameters
*/
public Banana(Integer length) {
@JsonCreator(mode = JsonCreator.Mode.PROPERTIES)
public Banana(@JsonProperty("length") Integer length) {
this.length = length;
this.fruitType = fruitType;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,8 @@ public Apple() {
/**
* Constructor with only required parameters
*/
public Apple(Integer seeds) {
@JsonCreator(mode = JsonCreator.Mode.PROPERTIES)
public Apple(@JsonProperty("seeds") Integer seeds) {
this.seeds = seeds;
this.fruitType = fruitType;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,8 @@ public Banana() {
/**
* Constructor with only required parameters
*/
public Banana(Integer length) {
@JsonCreator(mode = JsonCreator.Mode.PROPERTIES)
public Banana(@JsonProperty("length") Integer length) {
this.length = length;
this.fruitType = fruitType;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,8 @@ public Apple() {
/**
* Constructor with only required parameters
*/
public Apple(Integer seeds) {
@JsonCreator(mode = JsonCreator.Mode.PROPERTIES)
public Apple(@JsonProperty("seeds") Integer seeds) {
this.seeds = seeds;
this.fruitType = fruitType;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,8 @@ public Banana() {
/**
* Constructor with only required parameters
*/
public Banana(Integer length) {
@JsonCreator(mode = JsonCreator.Mode.PROPERTIES)
public Banana(@JsonProperty("length") Integer length) {
this.length = length;
this.fruitType = fruitType;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,8 @@ public TypeHolderDefault() {
/**
* Constructor with only required parameters
*/
public TypeHolderDefault(String stringItem, BigDecimal numberItem, Integer integerItem, Boolean boolItem, List<Integer> arrayItem) {
@JsonCreator(mode = JsonCreator.Mode.PROPERTIES)
public TypeHolderDefault(@JsonProperty("string_item") String stringItem, @JsonProperty("number_item") BigDecimal numberItem, @JsonProperty("integer_item") Integer integerItem, @JsonProperty("bool_item") Boolean boolItem, @JsonProperty("array_item") List<Integer> arrayItem) {
this.stringItem = stringItem;
this.numberItem = numberItem;
this.integerItem = integerItem;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,8 @@ public TypeHolderExample() {
/**
* Constructor with only required parameters
*/
public TypeHolderExample(String stringItem, BigDecimal numberItem, Float floatItem, Integer integerItem, Boolean boolItem, List<Integer> arrayItem) {
@JsonCreator(mode = JsonCreator.Mode.PROPERTIES)
public TypeHolderExample(@JsonProperty("string_item") String stringItem, @JsonProperty("number_item") BigDecimal numberItem, @JsonProperty("float_item") Float floatItem, @JsonProperty("integer_item") Integer integerItem, @JsonProperty("bool_item") Boolean boolItem, @JsonProperty("array_item") List<Integer> arrayItem) {
this.stringItem = stringItem;
this.numberItem = numberItem;
this.floatItem = floatItem;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,8 @@ public TypeHolderDefault() {
/**
* Constructor with only required parameters
*/
public TypeHolderDefault(String stringItem, BigDecimal numberItem, Integer integerItem, Boolean boolItem, List<Integer> arrayItem) {
@JsonCreator(mode = JsonCreator.Mode.PROPERTIES)
public TypeHolderDefault(@JsonProperty("string_item") String stringItem, @JsonProperty("number_item") BigDecimal numberItem, @JsonProperty("integer_item") Integer integerItem, @JsonProperty("bool_item") Boolean boolItem, @JsonProperty("array_item") List<Integer> arrayItem) {
this.stringItem = stringItem;
this.numberItem = numberItem;
this.integerItem = integerItem;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,8 @@ public TypeHolderExample() {
/**
* Constructor with only required parameters
*/
public TypeHolderExample(String stringItem, BigDecimal numberItem, Float floatItem, Integer integerItem, Boolean boolItem, List<Integer> arrayItem) {
@JsonCreator(mode = JsonCreator.Mode.PROPERTIES)
public TypeHolderExample(@JsonProperty("string_item") String stringItem, @JsonProperty("number_item") BigDecimal numberItem, @JsonProperty("float_item") Float floatItem, @JsonProperty("integer_item") Integer integerItem, @JsonProperty("bool_item") Boolean boolItem, @JsonProperty("array_item") List<Integer> arrayItem) {
this.stringItem = stringItem;
this.numberItem = numberItem;
this.floatItem = floatItem;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,8 @@ public TypeHolderDefault() {
/**
* Constructor with only required parameters
*/
public TypeHolderDefault(String stringItem, BigDecimal numberItem, Integer integerItem, Boolean boolItem, List<Integer> arrayItem) {
@JsonCreator(mode = JsonCreator.Mode.PROPERTIES)
public TypeHolderDefault(@JsonProperty("string_item") String stringItem, @JsonProperty("number_item") BigDecimal numberItem, @JsonProperty("integer_item") Integer integerItem, @JsonProperty("bool_item") Boolean boolItem, @JsonProperty("array_item") List<Integer> arrayItem) {
this.stringItem = stringItem;
this.numberItem = numberItem;
this.integerItem = integerItem;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,8 @@ public TypeHolderExample() {
/**
* Constructor with only required parameters
*/
public TypeHolderExample(String stringItem, BigDecimal numberItem, Float floatItem, Integer integerItem, Boolean boolItem, List<Integer> arrayItem) {
@JsonCreator(mode = JsonCreator.Mode.PROPERTIES)
public TypeHolderExample(@JsonProperty("string_item") String stringItem, @JsonProperty("number_item") BigDecimal numberItem, @JsonProperty("float_item") Float floatItem, @JsonProperty("integer_item") Integer integerItem, @JsonProperty("bool_item") Boolean boolItem, @JsonProperty("array_item") List<Integer> arrayItem) {
this.stringItem = stringItem;
this.numberItem = numberItem;
this.floatItem = floatItem;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,8 @@ public TypeHolderDefault() {
/**
* Constructor with only required parameters
*/
public TypeHolderDefault(String stringItem, BigDecimal numberItem, Integer integerItem, Boolean boolItem, List<Integer> arrayItem) {
@JsonCreator(mode = JsonCreator.Mode.PROPERTIES)
public TypeHolderDefault(@JsonProperty("string_item") String stringItem, @JsonProperty("number_item") BigDecimal numberItem, @JsonProperty("integer_item") Integer integerItem, @JsonProperty("bool_item") Boolean boolItem, @JsonProperty("array_item") List<Integer> arrayItem) {
this.stringItem = stringItem;
this.numberItem = numberItem;
this.integerItem = integerItem;
Expand Down
Loading
Loading