| package com.fasterxml.jackson.annotation; |
| |
| import java.lang.annotation.ElementType; |
| import java.lang.annotation.Retention; |
| import java.lang.annotation.RetentionPolicy; |
| import java.lang.annotation.Target; |
| |
| /** |
| * Annotation used to indicate when value of the annotated property (when |
| * used for a field, method or constructor parameter), or all |
| * properties of the annotated class, is to be serialized. |
| * Without annotation property values are always included, but by using |
| * this annotation one can specify simple exclusion rules to reduce |
| * amount of properties to write out. |
| * |
| * @since 2.0 |
| */ |
| @Target({ElementType.ANNOTATION_TYPE, ElementType.METHOD, ElementType.FIELD, |
| ElementType.TYPE, ElementType.PARAMETER}) |
| @Retention(RetentionPolicy.RUNTIME) |
| @com.fasterxml.jackson.annotation.JacksonAnnotation |
| public @interface JsonInclude |
| { |
| /** |
| * Inclusion rule to use for instances (values) of types (Classes) or |
| * properties annotated. |
| */ |
| public Include value() default Include.ALWAYS; |
| |
| /** |
| * Inclusion rule to use for entries ("content") of annotated |
| * {@link java.util.Map}s; defaults to {@link Include#ALWAYS}. |
| * |
| * @since 2.5 |
| */ |
| public Include content() default Include.ALWAYS; |
| |
| /* |
| /********************************************************** |
| /* Value enumerations needed |
| /********************************************************** |
| */ |
| |
| /** |
| * Enumeration used with {@link JsonInclude} |
| * to define which properties |
| * of Java Beans are to be included in serialization. |
| *<p> |
| * Note: Jackson 1.x had similarly named ("Inclusion") enumeration included |
| * in <code>JsonSerialize</code> annotation: it is now deprecated |
| * and this value used instead. |
| */ |
| public enum Include |
| { |
| /** |
| * Value that indicates that property is to be always included, |
| * independent of value of the property. |
| */ |
| ALWAYS, |
| |
| /** |
| * Value that indicates that only properties with non-null |
| * values are to be included. |
| */ |
| NON_NULL, |
| |
| /** |
| * Value that indicates that only properties that have values |
| * that differ from default settings (meaning values they have |
| * when Bean is constructed with its no-arguments constructor) |
| * are to be included. Value is generally not useful with |
| * {@link java.util.Map}s, since they have no default values; |
| * and if used, works same as {@link #ALWAYS}. |
| */ |
| NON_DEFAULT, |
| |
| /** |
| * Value that indicates that only properties that have values |
| * that values that are null or what is considered empty are |
| * not to be included. |
| *<p> |
| * Default emptiness is defined for following type: |
| *<ul> |
| * <li>For {@link java.util.Collection}s and {@link java.util.Map}s, |
| * method <code>isEmpty()</code> is called; |
| * </li> |
| * <li>For Java arrays, empty arrays are ones with length of 0 |
| * </li> |
| * <li>For Java {@link java.lang.String}s, <code>length()</code> is called, |
| * and return value of 0 indicates empty String (note that <code>String.isEmpty()</code> |
| * was added in Java 1.6 and as such can not be used by Jackson |
| * </li> |
| * <ul> |
| * and for other types, non-null values are to be included. |
| *<p> |
| * Note that this default handling can be overridden by custom |
| * <code>JsonSerializer</code> implementation: if method <code>isEmpty()</code> |
| * is overridden, it will be called to see if non-null values are |
| * considered empty (null is always considered empty). |
| */ |
| NON_EMPTY |
| ; |
| } |
| |
| } |