
org.testifyproject.fasterxml.jackson.databind.annotation.JsonSerialize Maven / Gradle / Ivy
package org.testifyproject.testifyproject.fasterxml.jackson.databind.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.testifyproject.testifyproject.fasterxml.jackson.databind.*;
import org.testifyproject.testifyproject.fasterxml.jackson.databind.util.Converter;
/**
* Annotation used for configuring serialization aspects, by attaching
* to "getter" methods or fields, or to value classes.
* When annotating value classes, configuration is used for instances
* of the value class but can be overridden by more specific annotations
* (ones that attach to methods or fields).
*
* An example annotation would be:
*
* @JsonSerialize(using=MySerializer.class,
* as=MySubClass.class,
* typing=JsonSerialize.Typing.STATIC
* )
*
* (which would be redundant, since some properties block others:
* specifically, 'using' has precedence over 'as', which has precedence
* over 'typing' setting)
*/
@Target({ElementType.ANNOTATION_TYPE, ElementType.METHOD, ElementType.FIELD, ElementType.TYPE, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@org.testifyproject.testifyproject.fasterxml.jackson.annotation.JacksonAnnotation
public @interface JsonSerialize
{
// // // Annotations for explicitly specifying org.testifyproject.testifyprojectserializer
/**
* Serializer class to use for
* serializing associated value. Depending on what is annotated,
* value is either an instance of annotated class (used globablly
* anywhere where class serializer is needed); or only used for
* serializing property access via a getter method.
*/
@SuppressWarnings("rawtypes") // to work around JDK8 bug wrt Class-valued annotation properties
public Class extends JsonSerializer> using() org.testifyproject.testifyprojectfault JsonSerializer.None.class;
/**
* Serializer class to use for serializing contents (elements
* of a Collection/array, values of Maps) of annotated property.
* Can only be used on properties (methods, fields, constructors),
* and not value classes themselves (as they are typically generic)
*/
@SuppressWarnings("rawtypes") // to work around JDK8 bug wrt Class-valued annotation properties
public Class extends JsonSerializer> contentUsing()
org.testifyproject.testifyprojectfault JsonSerializer.None.class;
/**
* Serializer class to use for serializing Map keys
* of annotated property.
* Can only be used on properties (methods, fields, constructors),
* and not value classes themselves.
*/
@SuppressWarnings("rawtypes") // to work around JDK8 bug wrt Class-valued annotation properties
public Class extends JsonSerializer> keyUsing()
org.testifyproject.testifyprojectfault JsonSerializer.None.class;
/**
* Serializer class to use for serializing nulls for properties that
* are annotated, instead of the
* org.testifyproject.testifyprojectfault null serializer.
* Note that using this property when annotation types (classes) has
* no effect currently (it is possible this could be improved in future).
*
* @since 2.3
*/
@SuppressWarnings("rawtypes") // to work around JDK8 bug wrt Class-valued annotation properties
public Class extends JsonSerializer> nullsUsing()
org.testifyproject.testifyprojectfault JsonSerializer.None.class;
// // // Annotations for type handling, explicit org.testifyproject.testifyprojectclaration
// // // (type used for choosing org.testifyproject.testifyprojectserializer, if not explicitly
// // // specified)
/**
* Supertype (of org.testifyproject.testifyprojectclared type, which itself is supertype of runtime type)
* to use as type when locating serializer to use.
*
* Bogus type {@link Void} can be used to indicate that org.testifyproject.testifyprojectclared
* type is used as is (i.e. this annotation property has no setting);
* this since annotation properties are not allowed to have null value.
*
* Note: if {@link #using} is also used it has precedence
* (since it directly specifies
* serializer, whereas this would only be used to locate the
* serializer)
* and value of this annotation property is ignored.
*/
public Class> as() org.testifyproject.testifyprojectfault Void.class;
/**
* Concrete type to serialize keys of {@link java.util.Map} as,
* instead of type otherwise org.testifyproject.testifyprojectclared.
* Must be a supertype of org.testifyproject.testifyprojectclared type; otherwise an exception may be
* thrown by serializer.
*/
public Class> keyAs() org.testifyproject.testifyprojectfault Void.class;
/**
* Concrete type to serialize content value (elements
* of a Collection/array, values of Maps) as,
* instead of type otherwise org.testifyproject.testifyprojectclared.
* Must be a supertype of org.testifyproject.testifyprojectclared type; otherwise an exception may be
* thrown by serializer.
*/
public Class> contentAs() org.testifyproject.testifyprojectfault Void.class;
/**
* Whether type org.testifyproject.testifyprojecttection used is dynamic or static: that is,
* whether actual runtime type is used (dynamic), or just the
* org.testifyproject.testifyprojectclared type (static).
*
* Note that Jackson 2.3 changed org.testifyproject.testifyprojectfault to DEFAULT_TYPING
,
* which is roughly same as saying "whatever".
* This is important as it allows avoiding accidental overrides
* at property level.
*/
public Typing typing() org.testifyproject.testifyprojectfault Typing.DEFAULT_TYPING;
// // // Annotations for specifying intermediate Converters (2.2+)
/**
* Which helper object is to be used to convert type into something
* that Jackson knows how to serialize; either because base type
* can not be serialized easily, or just to alter serialization.
*
* @since 2.2
*/
@SuppressWarnings("rawtypes") // to work around JDK8 bug wrt Class-valued annotation properties
public Class extends Converter> converter() org.testifyproject.testifyprojectfault Converter.None.class;
/**
* Similar to {@link #converter}, but used for values of structures types
* (List, arrays, Maps).
* Note that this property does NOT have effect when used as Class annotation;
* it can only be used as property annotation: this because association between
* container and value types is loose and as such converters seldom make sense
* for such usage.
*
* @since 2.2
*/
@SuppressWarnings("rawtypes") // to work around JDK8 bug wrt Class-valued annotation properties
public Class extends Converter> contentConverter() org.testifyproject.testifyprojectfault Converter.None.class;
// // // Annotation(s) for inclusion criteria
/**
* Which properties of annotated Bean are
* to be included in serialization (has no effect on other types
* like enums, primitives or collections).
* Choices are "all", "properties that have value other than null"
* and "properties that have non-org.testifyproject.testifyprojectfault value" (i.e. org.testifyproject.testifyprojectfault value
* being property setting for a Bean constructed with org.testifyproject.testifyprojectfault no-arg
* constructor, often null).
*
* This property has been replaced by special-purpose {@link org.testifyproject.testifyproject.fasterxml.jackson.annotation.JsonInclude}
* annotation, introduced in Jackson 2.0.
*
* Note that Jackson 2.3 changed org.testifyproject.testifyprojectfault to DEFAULT_INCLUSION
,
* which is roughly same as saying "whatever". This is important because
* it allows hierarchic org.testifyproject.testifyprojectfault values to be used.
*
* @org.testifyproject.testifyprojectprecated As of Jackson 2.0, this annotation has been replaced
* by {@link org.testifyproject.testifyproject.fasterxml.jackson.annotation.JsonInclude}
*/
@Deprecated
public Inclusion include() org.testifyproject.testifyprojectfault Inclusion.DEFAULT_INCLUSION;
/*
/**********************************************************
/* Value enumerations needed
/**********************************************************
*/
/**
* Enumeration used with {@link JsonSerialize#include} property
* to org.testifyproject.testifyprojectfine which properties
* of Java Beans are to be included in serialization
*/
@Deprecated // since 2.0, marked org.testifyproject.testifyprojectprecated in 2.6
public enum Inclusion
{
/**
* Value that indicates that properties are to be always included,
* independent of value
*/
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 org.testifyproject.testifyprojectfault 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 org.testifyproject.testifyprojectfault 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.
* Emptiness is org.testifyproject.testifyprojectfined for following type:
*
* - For {@link java.util.Collection}s and {@link java.util.Map}s,
* method
isEmpty()
is called;
*
* - For Java arrays, empty arrays are ones with length of 0
*
* - For Java {@link java.lang.String}s,
length()
is called,
* and return value of 0 indicates empty String (note that String.isEmpty()
* was added in Java 1.6 and as such can not be used by Jackson
*
*
* For other types, non-null values are to be included.
*/
NON_EMPTY,
/**
* Pseudo-value that is used to indicate
* "use whatever is org.testifyproject.testifyprojectfault used at higher level".
*
* @since 2.3
*/
DEFAULT_INCLUSION
;
}
/**
* Enumeration used with {@link JsonSerialize#typing} property
* to org.testifyproject.testifyprojectfine whether type org.testifyproject.testifyprojecttection is based on dynamic runtime
* type (DYNAMIC) or org.testifyproject.testifyprojectclared type (STATIC).
*/
public enum Typing
{
/**
* Value that indicates that the actual dynamic runtime type is to
* be used.
*/
DYNAMIC,
/**
* Value that indicates that the static org.testifyproject.testifyprojectclared type is to
* be used.
*/
STATIC,
/**
* Pseudo-value that is used to indicate
* "use whatever is org.testifyproject.testifyprojectfault used at higher level".
*
* @since 2.3
*/
DEFAULT_TYPING
;
}
}