Skip to content

Commit db6ee58

Browse files
committed
fix: honor required fields in jackson @JsonProperty annotations
1 parent bf67367 commit db6ee58

File tree

3 files changed

+6
-6
lines changed

3 files changed

+6
-6
lines changed

modules/openapi-generator/src/main/resources/Java/jackson_annotations.mustache

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* If the field is required, always include it, even if it is null.
55
* Else use custom behaviour, IOW use whatever is defined on the object mapper
66
}}
7-
@JsonProperty(JSON_PROPERTY_{{nameInSnakeCase}})
7+
@JsonProperty(value = JSON_PROPERTY_{{nameInSnakeCase}}, required = {{required}})
88
@JsonInclude({{#isMap}}{{#items.isNullable}}content = JsonInclude.Include.ALWAYS, {{/items.isNullable}}{{/isMap}}value = JsonInclude.Include.{{#required}}ALWAYS{{/required}}{{^required}}USE_DEFAULTS{{/required}})
99
{{#withXml}}
1010
@JacksonXmlProperty(localName = "{{items.xmlName}}{{^items.xmlName}}{{xmlName}}{{^xmlName}}{{baseName}}{{/xmlName}}{{/items.xmlName}}"{{#isXmlAttribute}}, isAttribute = true{{/isXmlAttribute}}{{#xmlNamespace}}, namespace = "{{.}}"{{/xmlNamespace}})

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

+3-3
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ public class {{classname}} {{#parent}}extends {{{.}}} {{/parent}}{{#vendorExtens
108108
{{#jsonb}}@JsonbCreator{{/jsonb}}{{#jackson}}@JsonCreator{{/jackson}}
109109
public {{classname}}(
110110
{{#readOnlyVars}}
111-
{{#jsonb}}@JsonbProperty(value = "{{baseName}}"{{^required}}, nullable = true{{/required}}){{/jsonb}}{{#jackson}}@JsonProperty(JSON_PROPERTY_{{nameInSnakeCase}}){{/jackson}} {{{datatypeWithEnum}}} {{name}}{{^-last}}, {{/-last}}
111+
{{#jsonb}}@JsonbProperty(value = "{{baseName}}"{{^required}}, nullable = true{{/required}}){{/jsonb}}{{#jackson}}@JsonProperty(value = JSON_PROPERTY_{{nameInSnakeCase}}, required = {{required}}){{/jackson}} {{{datatypeWithEnum}}} {{name}}{{^-last}}, {{/-last}}
112112
{{/readOnlyVars}}
113113
) {
114114
this();
@@ -123,7 +123,7 @@ public class {{classname}} {{#parent}}extends {{{.}}} {{/parent}}{{#vendorExtens
123123
/**
124124
* Constructor with all args parameters
125125
*/
126-
public {{classname}}({{#vendorExtensions.x-java-all-args-constructor-vars}}{{#jsonb}}@JsonbProperty(value = "{{baseName}}"{{^required}}, nullable = true{{/required}}){{/jsonb}}{{#jackson}}@JsonProperty(JSON_PROPERTY_{{nameInSnakeCase}}){{/jackson}} {{{datatypeWithEnum}}} {{name}}{{^-last}}, {{/-last}}{{/vendorExtensions.x-java-all-args-constructor-vars}}) {
126+
public {{classname}}({{#vendorExtensions.x-java-all-args-constructor-vars}}{{#jsonb}}@JsonbProperty(value = "{{baseName}}"{{^required}}, nullable = true{{/required}}){{/jsonb}}{{#jackson}}@JsonProperty(value = JSON_PROPERTY_{{nameInSnakeCase}}, required = {{required}}){{/jackson}} {{{datatypeWithEnum}}} {{name}}{{^-last}}, {{/-last}}{{/vendorExtensions.x-java-all-args-constructor-vars}}) {
127127
{{#parent}}
128128
super({{#parentVars}}{{name}}{{^-last}}, {{/-last}}{{/parentVars}});
129129
{{/parent}}
@@ -252,7 +252,7 @@ public class {{classname}} {{#parent}}extends {{{.}}} {{/parent}}{{#vendorExtens
252252
return {{name}};
253253
}
254254
{{/vendorExtensions.x-is-jackson-optional-nullable}}{{#vendorExtensions.x-is-jackson-optional-nullable}}
255-
@JsonProperty(JSON_PROPERTY_{{nameInSnakeCase}})
255+
@JsonProperty(value = JSON_PROPERTY_{{nameInSnakeCase}}, required = {{required}})
256256
{{#isReadOnly}}private{{/isReadOnly}}{{^isReadOnly}}public{{/isReadOnly}} void {{setter}}_JsonNullable(JsonNullable<{{{datatypeWithEnum}}}> {{name}}) {
257257
{{! For getters/setters that have name differing from attribute name, we must include setter (albeit private) for jackson to be able to set the attribute}}
258258
this.{{name}} = {{name}};

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

+2-2
Original file line numberDiff line numberDiff line change
@@ -2099,10 +2099,10 @@ public void testDeprecatedPropertyJersey3() {
20992099
TestUtils.assertFileContains(
21002100
output.resolve("src/main/java/org/openapitools/client/model/BigDog.java"),
21012101
"@Deprecated\n public BigDog declawed(@jakarta.annotation.Nullable Boolean declawed) {", // deprecated builder method
2102-
"@Deprecated\n @jakarta.annotation.Nullable\n @JsonProperty(JSON_PROPERTY_DECLAWED)\n"
2102+
"@Deprecated\n @jakarta.annotation.Nullable\n @JsonProperty(value = JSON_PROPERTY_DECLAWED, required = false)\n"
21032103
+ " @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)\n\n"
21042104
+ " public Boolean getDeclawed() {", // deprecated getter
2105-
"@Deprecated\n @JsonProperty(JSON_PROPERTY_DECLAWED)\n"
2105+
"@Deprecated\n @JsonProperty(value = JSON_PROPERTY_DECLAWED, required = false)\n"
21062106
+ " @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)\n"
21072107
+ " public void setDeclawed(@jakarta.annotation.Nullable Boolean declawed) {" // deprecated setter
21082108
);

0 commit comments

Comments
 (0)