Skip to content

Commit 7729070

Browse files
committed
Add JsonCreator on constructor
1 parent d19f0cd commit 7729070

92 files changed

Lines changed: 199 additions & 94 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

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

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1155,10 +1155,21 @@ public Map<String, ModelsMap> postProcessAllModels(Map<String, ModelsMap> objs)
11551155
// conditionally force the generation of no args constructor
11561156
for (CodegenModel cm : allModels.values()) {
11571157
boolean hasLombokNoArgsConstructor = lombokAnnotations != null && lombokAnnotations.containsKey("NoArgsConstructor");
1158+
boolean hasAllArgsConstructor = cm.vendorExtensions.containsKey("x-java-all-args-constructor");
11581159
if (!hasLombokNoArgsConstructor
1159-
&& (cm.hasRequired || cm.vendorExtensions.containsKey("x-java-all-args-constructor"))) {
1160+
&& (cm.hasRequired || hasAllArgsConstructor)) {
11601161
cm.vendorExtensions.put("x-java-no-args-constructor", true);
11611162
}
1163+
1164+
if (cm.hasRequired &&
1165+
this.generatedConstructorWithRequiredArgs &&
1166+
!hasAllArgsConstructor &&
1167+
cm.requiredVars.size() == cm.allVars.size() &&
1168+
isJackson()) {
1169+
// add @JsonCreator and @JsonProperty on required argument constructor
1170+
cm.vendorExtensions.put("x-java-required-constructor-jsoncreator", true);
1171+
}
1172+
11621173
}
11631174
return objs;
11641175
}

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

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,10 @@ public {{>sealed}}class {{classname}}{{#parent}} extends {{{parent}}}{{/parent}}
102102
/**
103103
* Constructor with only required parameters{{#generateConstructorWithAllArgs}}{{^vendorExtensions.x-java-all-args-constructor}} and all parameters{{/vendorExtensions.x-java-all-args-constructor}}{{/generateConstructorWithAllArgs}}
104104
*/
105-
public {{classname}}({{#requiredVars}}{{{datatypeWithEnum}}} {{name}}{{^-last}}, {{/-last}}{{/requiredVars}}) {
105+
{{#vendorExtensions.x-java-required-constructor-jsoncreator}}
106+
@JsonCreator(mode = JsonCreator.Mode.PROPERTIES)
107+
{{/vendorExtensions.x-java-required-constructor-jsoncreator}}
108+
public {{classname}}({{^vendorExtensions.x-java-required-constructor-jsoncreator}}{{#requiredVars}}{{{datatypeWithEnum}}} {{name}}{{^-last}}, {{/-last}}{{/requiredVars}}{{/vendorExtensions.x-java-required-constructor-jsoncreator}}{{#vendorExtensions.x-java-required-constructor-jsoncreator}}{{#requiredVars}}@JsonProperty("{{baseName}}") {{{datatypeWithEnum}}} {{name}}{{^-last}}, {{/-last}}{{/requiredVars}}{{/vendorExtensions.x-java-required-constructor-jsoncreator}}) {
106109
{{#parent}}
107110
super({{#parentRequiredVars}}{{name}}{{^-last}}, {{/-last}}{{/parentRequiredVars}});
108111
{{/parent}}
@@ -124,8 +127,9 @@ public {{>sealed}}class {{classname}}{{#parent}} extends {{{parent}}}{{/parent}}
124127

125128
/**
126129
* Constructor with all args parameters
127-
*/
128-
public {{classname}}({{#vendorExtensions.x-java-all-args-constructor-vars}}{{>nullableAnnotation}}{{{datatypeWithEnum}}} {{name}}{{^-last}}, {{/-last}}{{/vendorExtensions.x-java-all-args-constructor-vars}}) {
130+
*/{{#jackson}}
131+
@JsonCreator(mode = JsonCreator.Mode.PROPERTIES){{/jackson}}
132+
public {{classname}}({{#vendorExtensions.x-java-all-args-constructor-vars}}{{>nullableAnnotation}}{{#jackson}}@JsonProperty("{{baseName}}") {{/jackson}}{{{datatypeWithEnum}}} {{name}}{{^-last}}, {{/-last}}{{/vendorExtensions.x-java-all-args-constructor-vars}}) {
129133
{{#parent}}
130134
super({{#parentVars}}{{name}}{{^-last}}, {{/-last}}{{/parentVars}});
131135
{{/parent}}

samples/client/petstore/spring-http-interface-reactive-noResponseEntity/src/main/java/org/openapitools/model/TypeHolderDefault.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,8 @@ public TypeHolderDefault() {
4242
/**
4343
* Constructor with only required parameters
4444
*/
45-
public TypeHolderDefault(String stringItem, BigDecimal numberItem, Integer integerItem, Boolean boolItem, List<Integer> arrayItem) {
45+
@JsonCreator(mode = JsonCreator.Mode.PROPERTIES)
46+
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) {
4647
this.stringItem = stringItem;
4748
this.numberItem = numberItem;
4849
this.integerItem = integerItem;

samples/client/petstore/spring-http-interface-reactive-noResponseEntity/src/main/java/org/openapitools/model/TypeHolderExample.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,8 @@ public TypeHolderExample() {
4444
/**
4545
* Constructor with only required parameters
4646
*/
47-
public TypeHolderExample(String stringItem, BigDecimal numberItem, Float floatItem, Integer integerItem, Boolean boolItem, List<Integer> arrayItem) {
47+
@JsonCreator(mode = JsonCreator.Mode.PROPERTIES)
48+
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) {
4849
this.stringItem = stringItem;
4950
this.numberItem = numberItem;
5051
this.floatItem = floatItem;

samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/TypeHolderDefault.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,8 @@ public TypeHolderDefault() {
4242
/**
4343
* Constructor with only required parameters
4444
*/
45-
public TypeHolderDefault(String stringItem, BigDecimal numberItem, Integer integerItem, Boolean boolItem, List<Integer> arrayItem) {
45+
@JsonCreator(mode = JsonCreator.Mode.PROPERTIES)
46+
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) {
4647
this.stringItem = stringItem;
4748
this.numberItem = numberItem;
4849
this.integerItem = integerItem;

samples/client/petstore/spring-http-interface-reactive/src/main/java/org/openapitools/model/TypeHolderExample.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,8 @@ public TypeHolderExample() {
4444
/**
4545
* Constructor with only required parameters
4646
*/
47-
public TypeHolderExample(String stringItem, BigDecimal numberItem, Float floatItem, Integer integerItem, Boolean boolItem, List<Integer> arrayItem) {
47+
@JsonCreator(mode = JsonCreator.Mode.PROPERTIES)
48+
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) {
4849
this.stringItem = stringItem;
4950
this.numberItem = numberItem;
5051
this.floatItem = floatItem;

samples/openapi3/server/petstore/spring-boot-oneof-interface/src/main/java/org/openapitools/model/Apple.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,8 @@ public Apple() {
3737
/**
3838
* Constructor with only required parameters
3939
*/
40-
public Apple(Integer seeds) {
40+
@JsonCreator(mode = JsonCreator.Mode.PROPERTIES)
41+
public Apple(@JsonProperty("seeds") Integer seeds) {
4142
this.seeds = seeds;
4243
this.fruitType = fruitType;
4344
}

samples/openapi3/server/petstore/spring-boot-oneof-interface/src/main/java/org/openapitools/model/Banana.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,8 @@ public Banana() {
3737
/**
3838
* Constructor with only required parameters
3939
*/
40-
public Banana(Integer length) {
40+
@JsonCreator(mode = JsonCreator.Mode.PROPERTIES)
41+
public Banana(@JsonProperty("length") Integer length) {
4142
this.length = length;
4243
this.fruitType = fruitType;
4344
}

samples/openapi3/server/petstore/spring-boot-oneof-sealed/src/main/java/org/openapitools/model/Apple.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,8 @@ public Apple() {
3737
/**
3838
* Constructor with only required parameters
3939
*/
40-
public Apple(Integer seeds) {
40+
@JsonCreator(mode = JsonCreator.Mode.PROPERTIES)
41+
public Apple(@JsonProperty("seeds") Integer seeds) {
4142
this.seeds = seeds;
4243
this.fruitType = fruitType;
4344
}

samples/openapi3/server/petstore/spring-boot-oneof-sealed/src/main/java/org/openapitools/model/Banana.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,8 @@ public Banana() {
3737
/**
3838
* Constructor with only required parameters
3939
*/
40-
public Banana(Integer length) {
40+
@JsonCreator(mode = JsonCreator.Mode.PROPERTIES)
41+
public Banana(@JsonProperty("length") Integer length) {
4142
this.length = length;
4243
this.fruitType = fruitType;
4344
}

0 commit comments

Comments
 (0)