Skip to content

Commit 753e6c0

Browse files
authored
Add @JsonProperty.isRequired (#285)
1 parent 4fb3f97 commit 753e6c0

File tree

2 files changed

+34
-9
lines changed

2 files changed

+34
-9
lines changed

release-notes/VERSION-2.x

+2
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ NOTE: Annotations module will never contain changes in patch versions,
1616
#280: Minor change to `module-info.java`: use "open module"
1717
#281: [gradle-module-metadata-maven-plugin] update to version 1.0
1818
(contributed by @jjohannes)
19+
#284: Add `OptBoolean` valued `@JsonProperty.isRequired` to
20+
(eventually) replace `@JsonProperty.required`
1921

2022
2.18.0 (26-Sep-2024)
2123

src/main/java/com/fasterxml/jackson/annotation/JsonProperty.java

+32-9
Original file line numberDiff line numberDiff line change
@@ -92,15 +92,31 @@ public enum MyEnum {
9292
String namespace() default "";
9393

9494
/**
95-
* Property that indicates whether a value (which may be explicit
96-
* null) is expected for property during deserialization or not.
97-
* If expected, <code>BeanDeserialized</code> should indicate
95+
* Property similar to {@link #isRequired}, but one that only
96+
* allows two values ({@code true} and {@code false}), defaulting
97+
* to {@code false}.
98+
*<p>
99+
* NOTE: as of Jackson 2.19, there is newer property, {@link #isRequired()},
100+
* to be used instead.
101+
*
102+
* @since 2.0
103+
*/
104+
boolean required() default false;
105+
106+
/**
107+
* Property that MAY indicate whether a value (which may be explicit
108+
* null) is required for a property during deserialization or not.
109+
* If required ({code OptBoolean.TRUE}), {@code Deserializer} should indicate
98110
* this as a validity problem (usually by throwing an exception,
99111
* but this may be sent via problem handlers that can try to
100-
* rectify the problem, for example, by supplying a default
101-
* value).
112+
* rectify the problem, for example, by supplying a default value) if no
113+
* value is present in incoming content. If not required ({code OptBoolean.FALSE}),
114+
* no checking is to be done.
115+
* If not specified ({code OptBoolean.DEFAULT}) checking depends on higher
116+
* level settings (some modules may specify default "required-ness" for certain
117+
* kinds of properties).
102118
*<p>
103-
* Note that as of 2.6, this property is only used for Creator
119+
* Note that as of 2.19, this property is only used for Creator
104120
* Properties, to ensure existence of property value in JSON:
105121
* for other properties (ones injected using a setter or mutable
106122
* field), no validation is performed. Support for those cases
@@ -116,11 +132,18 @@ public enum MyEnum {
116132
* this property should be set to {@code false}. This is important because
117133
* validation of {@code required} properties occurs before the application of
118134
* secondary sources.
135+
*<p>
136+
* Default value ({@link OptBoolean#DEFAULT}) means that "required-ness"
137+
* is not specified by this annotation -- it is up to more general settings
138+
* (per-class, global) to determine whether the property is required or not.
139+
*<p>
140+
* NOTE: as of Jackson 2.19, the older property, {@link #required()},
141+
* is considered deprecated and should not be used.
119142
*
120-
* @since 2.0
143+
* @since 2.19
121144
*/
122-
boolean required() default false;
123-
145+
OptBoolean isRequired() default OptBoolean.DEFAULT;
146+
124147
/**
125148
* Property that indicates numerical index of this property (relative
126149
* to other properties specified for the Object). This index

0 commit comments

Comments
 (0)