Annotation Type JsonInclude
Note that the main inclusion criteria (one annotated with value())
is checked on Java object level, for the annotated type,
and NOT on JSON output -- so even with JsonInclude.Include.NON_NULL
it is possible that JSON null values are output, if object reference
in question is not `null`. An example is AtomicReference
instance constructed to reference null value: such a value
would be serialized as JSON null, and not filtered out.
To base inclusion on value of contained value(s) (like java.util.Map
entries), you will typically also need
to specify content() annotation; for example, specifying only
value() as JsonInclude.Include.NON_EMPTY for a Map would
exclude Maps with no entries (empty Maps),
but would include Maps elements with null values (even
though nulls are considered "empty" values).
To exclude Maps with only `null`-valued entries,
you would use both annotations like so:
public class Bean {
@JsonInclude(value=Include.NON_EMPTY, content=Include.NON_NULL)
public Map<String,String> entries;
}
(in which case filtering first excludes Map entries with null values
and then excludes Maps that have no entries left).
Similarly you could exclude
Maps map entries with
"empty" values, or "non-default" values (see JsonInclude.Include.NON_EMPTY and
JsonInclude.Include.NON_DEFAULT for more details).
In addition to Maps, content concept is also supported for referential
types (like AtomicReference).
(For Jackson 2 only) Note that `content` is NOT currently (as of Jackson 2.20) supported for
arrays or Collections; support may be added in
future versions (but if so, will be configurable to allow disabling it).
(For Jackson 3 only) As of Jackson 3.1.0, content() also supports Collections
and Arrays when tools.jackson.databind.SerializationFeature#APPLY_JSON_INCLUDE_FOR_CONTAINERS
feature is enabled -- disabled by default for backward-compatibility (see [databind#5369] for more detail).
- Since:
- 2.0
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic enumEnumeration used withJsonIncludeto define which properties of Java Beans are to be included in serialization.static classHelper class used to contain information from a singleJsonIncludeannotation. -
Optional Element Summary
Optional ElementsModifier and TypeOptional ElementDescriptionInclusion rule to use for entries ("content") of annotatedMaps and referential types (likeAtomicReference); defaults toJsonInclude.Include.ALWAYS.Class<?> Specifies type of "Filter Object" to use in casecontent()isJsonInclude.Include.CUSTOM: if so, an instance is created by callingHandlerInstantiator(ofObjectMapper), which by default simply calls zero-argument constructor of the Filter Class.Inclusion rule to use for instances (values) of types (Classes) or properties annotated; defaults toJsonInclude.Include.ALWAYS.Class<?> Specifies type of "Filter Object" to use in casevalue()isJsonInclude.Include.CUSTOM: if so, an instance is created by callingHandlerInstantiator(ofObjectMapper), which by default simply calls zero-argument constructor of the Filter Class.
-
Element Details
-
value
JsonInclude.Include valueInclusion rule to use for instances (values) of types (Classes) or properties annotated; defaults toJsonInclude.Include.ALWAYS.- Returns:
- Inclusion rule for value itself
- Default:
ALWAYS
-
content
JsonInclude.Include contentInclusion rule to use for entries ("content") of annotatedMaps and referential types (likeAtomicReference); defaults toJsonInclude.Include.ALWAYS.- Returns:
- Inclusion rule for content (elements, values of structured types)
- Since:
- 2.5
- Default:
ALWAYS
-
valueFilter
Class<?> valueFilterSpecifies type of "Filter Object" to use in casevalue()isJsonInclude.Include.CUSTOM: if so, an instance is created by callingHandlerInstantiator(ofObjectMapper), which by default simply calls zero-argument constructor of the Filter Class.Whether the value is to be included or not is determined by calling Filter's
equals(value)method: if it returnstruevalue is NOT included (it is "filtered out"); iffalsevalue IS included ("not filtered out").- Since:
- 2.9
- Default:
java.lang.Void.class
-
contentFilter
Class<?> contentFilterSpecifies type of "Filter Object" to use in casecontent()isJsonInclude.Include.CUSTOM: if so, an instance is created by callingHandlerInstantiator(ofObjectMapper), which by default simply calls zero-argument constructor of the Filter Class.Whether the content value is to be included or not is determined by calling Filter's
equals(value)method: if it returnstruecontent value is NOT included (it is "filtered out"); iffalsecontent value IS included ("not filtered out").- Since:
- 2.9
- Default:
java.lang.Void.class
-