Skip to content

Commit a8fd5e0

Browse files
committed
Simplify JsonCreator and JsonProperty for constructors
1 parent a5424f2 commit a8fd5e0

8 files changed

Lines changed: 30 additions & 31 deletions

File tree

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

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1161,19 +1161,22 @@ public Map<String, ModelsMap> postProcessAllModels(Map<String, ModelsMap> objs)
11611161
cm.vendorExtensions.put("x-java-no-args-constructor", true);
11621162
}
11631163

1164-
if (!this.withXml &&
1165-
cm.hasRequired &&
1166-
this.generatedConstructorWithRequiredArgs &&
1167-
!hasAllArgsConstructor &&
1168-
cm.requiredVars.size() == cm.allVars.size() &&
1169-
isJackson()) {
1170-
cm.vendorExtensions.put("x-java-required-constructor-jsoncreator", true);
1171-
/* add @JsonCreator and @JsonProperty on required argument constructor
1172-
* currently only enabled for
1173-
* jackson and no withXml
1174-
* all fields are initialzed in the required constructor
1175-
* no all arg constructor
1176-
*/
1164+
1165+
// add @JsonCreator on constructor
1166+
if (!this.withXml && jackson) {
1167+
if (hasAllArgsConstructor) {
1168+
// add @JsonCreator and @JsonProperty on the all argument constructor
1169+
cm.vendorExtensions.put("java-all-args-constructor-jsoncreator", true);
1170+
List<CodegenProperty> properties = (List<CodegenProperty>)cm.vendorExtensions.get("x-java-all-args-constructor-vars");
1171+
properties.forEach(p -> p.vendorExtensions.put("x-java-all-args-jsonProperty", p.baseName));
1172+
} else if (this.generatedConstructorWithRequiredArgs && cm.hasRequired && cm.requiredVars.size() == cm.allVars.size()) {
1173+
/* add @JsonCreator and @JsonProperty on the required argument constructor
1174+
* all fields are initialzed in the required constructor
1175+
* no all arg constructor
1176+
*/
1177+
cm.vendorExtensions.put("x-java-required-constructor-jsoncreator", true);
1178+
cm.requiredVars.forEach(p -> p.vendorExtensions.put("x-java-required-args-jsonProperty", p.baseName));
1179+
}
11771180
}
11781181

11791182
}

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

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -102,10 +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-
{{#vendorExtensions.x-java-required-constructor-jsoncreator}}
105+
{{#vendorExtensions.x-java-required-constructor-jsoncreator}}
106106
@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}}) {
107+
{{/vendorExtensions.x-java-required-constructor-jsoncreator}}
108+
public {{classname}}({{#requiredVars}}{{#vendorExtensions.x-java-required-args-jsonProperty}}@JsonProperty("{{.}}") {{/vendorExtensions.x-java-required-args-jsonProperty}}{{{datatypeWithEnum}}} {{name}}{{^-last}}, {{/-last}}{{/requiredVars}}) {
109109
{{#parent}}
110110
super({{#parentRequiredVars}}{{name}}{{^-last}}, {{/-last}}{{/parentRequiredVars}});
111111
{{/parent}}
@@ -127,9 +127,11 @@ public {{>sealed}}class {{classname}}{{#parent}} extends {{{parent}}}{{/parent}}
127127

128128
/**
129129
* Constructor with all args parameters
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}}) {
130+
*/
131+
{{#vendorExtensions.java-all-args-constructor-jsoncreator}}
132+
@JsonCreator(mode = JsonCreator.Mode.PROPERTIES)
133+
{{/vendorExtensions.java-all-args-constructor-jsoncreator}}
134+
public {{classname}}({{#vendorExtensions.x-java-all-args-constructor-vars}}{{>nullableAnnotation}}{{#vendorExtensions.x-java-all-args-jsonProperty}}@JsonProperty("{{.}}") {{/vendorExtensions.x-java-all-args-jsonProperty}}{{{datatypeWithEnum}}} {{name}}{{^-last}}, {{/-last}}{{/vendorExtensions.x-java-all-args-constructor-vars}}) {
133135
{{#parent}}
134136
super({{#parentVars}}{{name}}{{^-last}}, {{/-last}}{{/parentVars}});
135137
{{/parent}}

samples/openapi3/server/petstore/springboot-3/src/main/java/org/openapitools/model/Category.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,7 @@ public Category() {
4141
/**
4242
* Constructor with all args parameters
4343
*/
44-
@JsonCreator(mode = JsonCreator.Mode.PROPERTIES)
45-
public Category(@Nullable @JsonProperty("id") Long id, @Nullable @JsonProperty("name") String name) {
44+
public Category(@Nullable Long id, @Nullable String name) {
4645
this.id = id;
4746
this.name = name;
4847
}

samples/openapi3/server/petstore/springboot-3/src/main/java/org/openapitools/model/ModelApiResponse.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,7 @@ public ModelApiResponse() {
4545
/**
4646
* Constructor with all args parameters
4747
*/
48-
@JsonCreator(mode = JsonCreator.Mode.PROPERTIES)
49-
public ModelApiResponse(@Nullable @JsonProperty("code") Integer code, @Nullable @JsonProperty("type") String type, @Nullable @JsonProperty("message") String message) {
48+
public ModelApiResponse(@Nullable Integer code, @Nullable String type, @Nullable String message) {
5049
this.code = code;
5150
this.type = type;
5251
this.message = message;

samples/openapi3/server/petstore/springboot-3/src/main/java/org/openapitools/model/Order.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,8 +90,7 @@ public Order() {
9090
/**
9191
* Constructor with all args parameters
9292
*/
93-
@JsonCreator(mode = JsonCreator.Mode.PROPERTIES)
94-
public Order(@Nullable @JsonProperty("id") Long id, @Nullable @JsonProperty("petId") Long petId, @Nullable @JsonProperty("quantity") Integer quantity, @Nullable @JsonProperty("shipDate") OffsetDateTime shipDate, @Nullable @JsonProperty("status") StatusEnum status, @JsonProperty("complete") Boolean complete) {
93+
public Order(@Nullable Long id, @Nullable Long petId, @Nullable Integer quantity, @Nullable OffsetDateTime shipDate, @Nullable StatusEnum status, Boolean complete) {
9594
this.id = id;
9695
this.petId = petId;
9796
this.quantity = quantity;

samples/openapi3/server/petstore/springboot-3/src/main/java/org/openapitools/model/Pet.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,8 +103,7 @@ public Pet(String name, List<String> photoUrls) {
103103
/**
104104
* Constructor with all args parameters
105105
*/
106-
@JsonCreator(mode = JsonCreator.Mode.PROPERTIES)
107-
public Pet(@Nullable @JsonProperty("id") Long id, @Nullable @JsonProperty("category") Category category, @JsonProperty("name") String name, @JsonProperty("photoUrls") List<String> photoUrls, @JsonProperty("tags") List<@Valid Tag> tags, @Nullable @JsonProperty("status") StatusEnum status) {
106+
public Pet(@Nullable Long id, @Nullable Category category, String name, List<String> photoUrls, List<@Valid Tag> tags, @Nullable StatusEnum status) {
108107
this.id = id;
109108
this.category = category;
110109
this.name = name;

samples/openapi3/server/petstore/springboot-3/src/main/java/org/openapitools/model/Tag.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,7 @@ public Tag() {
4141
/**
4242
* Constructor with all args parameters
4343
*/
44-
@JsonCreator(mode = JsonCreator.Mode.PROPERTIES)
45-
public Tag(@Nullable @JsonProperty("id") Long id, @Nullable @JsonProperty("name") String name) {
44+
public Tag(@Nullable Long id, @Nullable String name) {
4645
this.id = id;
4746
this.name = name;
4847
}

samples/openapi3/server/petstore/springboot-3/src/main/java/org/openapitools/model/User.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,7 @@ public User() {
5353
/**
5454
* Constructor with all args parameters
5555
*/
56-
@JsonCreator(mode = JsonCreator.Mode.PROPERTIES)
57-
public User(@Nullable @JsonProperty("id") Long id, @Nullable @JsonProperty("username") String username, @Nullable @JsonProperty("firstName") String firstName, @Nullable @JsonProperty("lastName") String lastName, @Nullable @JsonProperty("email") String email, @Nullable @JsonProperty("password") String password, @Nullable @JsonProperty("phone") String phone, @Nullable @JsonProperty("userStatus") Integer userStatus) {
56+
public User(@Nullable Long id, @Nullable String username, @Nullable String firstName, @Nullable String lastName, @Nullable String email, @Nullable String password, @Nullable String phone, @Nullable Integer userStatus) {
5857
this.id = id;
5958
this.username = username;
6059
this.firstName = firstName;

0 commit comments

Comments
 (0)