You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
76 lines
3.1 KiB
76 lines
3.1 KiB
7 years ago
|
package com.fr.third.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 for indicating that values of annotated type
|
||
|
* or property should be serializing so that instances either
|
||
|
* contain additional object identifier (in addition actual object
|
||
|
* properties), or as a reference that consists of an object id
|
||
|
* that refers to a full serialization. In practice this is done
|
||
|
* by serializing the first instance as full object and object
|
||
|
* identity, and other references to the object as reference values.
|
||
|
*<p>
|
||
|
* There are two main approaches to generating object identifier:
|
||
|
* either using a generator (either one of standard ones, or a custom
|
||
|
* generator), or using a value of a property. The latter case is
|
||
|
* indicated by using a placeholder generator marker
|
||
|
* {@link ObjectIdGenerators.PropertyGenerator}; former by using explicit generator.
|
||
|
* Object id has to be serialized as a property in case of POJOs;
|
||
|
* object identity is currently NOT support for JSON Array types
|
||
|
* (Java arrays or Lists) or Java Map types.
|
||
|
*<p>
|
||
|
* Finally, note that generator type of {@link ObjectIdGenerators.None}
|
||
|
* indicates that no Object Id should be included or used: it is included
|
||
|
* to allow suppressing Object Ids using mix-in annotations.
|
||
|
*
|
||
|
* @since 2.0
|
||
|
*/
|
||
|
@Target({ElementType.ANNOTATION_TYPE, ElementType.TYPE,
|
||
|
ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER})
|
||
|
@Retention(RetentionPolicy.RUNTIME)
|
||
|
@JacksonAnnotation
|
||
|
public @interface JsonIdentityInfo
|
||
|
{
|
||
|
/**
|
||
|
* Name of JSON property in which Object Id will reside: also,
|
||
|
* if "from property" marker generator is used, identifies
|
||
|
* property that will be accessed to get type id.
|
||
|
* If a property is used, name must match its external
|
||
|
* name (one defined by annotation, or derived from accessor
|
||
|
* name as per Java Bean Introspection rules).
|
||
|
*<p>
|
||
|
* Default value is <code>@id</code>.
|
||
|
*/
|
||
|
public String property() default "@id";
|
||
|
|
||
|
/**
|
||
|
* Generator to use for producing Object Identifier for objects:
|
||
|
* either one of pre-defined generators from
|
||
|
* {@link ObjectIdGenerator}, or a custom generator.
|
||
|
* Defined as class to instantiate.
|
||
|
*<p>
|
||
|
* Note that special type
|
||
|
* {@link ObjectIdGenerators.None}
|
||
|
* can be used to disable inclusion of Object Ids.
|
||
|
*/
|
||
|
public Class<? extends ObjectIdGenerator<?>> generator();
|
||
|
|
||
|
/**
|
||
|
* Scope is used to define applicability of an Object Id: all ids
|
||
|
* must be unique within their scope; where scope is defined
|
||
|
* as combination of this value and generator type.
|
||
|
* Comparison is simple equivalence, meaning that both type
|
||
|
* generator type and scope class must be the same.
|
||
|
*<p>
|
||
|
* Scope is used for determining how many generators are needed;
|
||
|
* more than one scope is typically only needed if external Object Ids
|
||
|
* have overlapping value domains (i.e. are only unique within some
|
||
|
* limited scope)
|
||
|
*/
|
||
|
public Class<?> scope() default Object.class;
|
||
|
}
|