package com.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 com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.ser.VirtualBeanPropertyWriter;
Annotation that may be used to add "virtual" properties to be written
after regular properties (although ordering may be changed using
both standard @JsonPropertyOrder
annotation, and
properties of this annotation).
Since: 2.5
/**
* Annotation that may be used to add "virtual" properties to be written
* after regular properties (although ordering may be changed using
* both standard <code>@JsonPropertyOrder</code> annotation, and
* properties of this annotation).
*
* @since 2.5
*/
@Target({ElementType.ANNOTATION_TYPE, ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
@com.fasterxml.jackson.annotation.JacksonAnnotation
public @interface JsonAppend
{
Set of attribute-backed properties to include when serializing
a POJO.
/**
* Set of attribute-backed properties to include when serializing
* a POJO.
*/
public Attr[] attrs() default { };
Set of general virtual properties to include when serializing a POJO.
/**
* Set of general virtual properties to include when serializing a POJO.
*/
public Prop[] props() default { };
Indicator used to determine whether properties defined are to be
appended after (false) or prepended before (true) regular properties.
Affects all kinds of properties defined using this annotation.
/**
* Indicator used to determine whether properties defined are to be
* appended after (false) or prepended before (true) regular properties.
* Affects all kinds of properties defined using this annotation.
*/
public boolean prepend() default false;
Definition of a single attribute-backed property. Attribute-backed properties will be appended after (or prepended before, as per prepend
) regular properties in specified order, although their placement may be further changed by the usual property-ordering functionality (alphabetic sorting; explicit ordering) /**
* Definition of a single attribute-backed property.
* Attribute-backed properties will be appended after (or prepended before,
* as per {@link #prepend}) regular properties
* in specified order, although their placement may be further changed
* by the usual property-ordering functionality (alphabetic sorting;
* explicit ordering)
*/
public @interface Attr
{
Name of attribute of which value to serialize. Is also used as the name of external property to write, unless overridden by assigning a value for propName()
. /**
* Name of attribute of which value to serialize. Is also used as the
* name of external property to write, unless overridden by
* assigning a value for {@link #propName()}.
*/
public String value();
Name to use for serializing value of the attribute; if not defined, value
will be used instead. /**
* Name to use for serializing value of the attribute; if not defined,
* {@link #value} will be used instead.
*/
public String propName() default "";
Optional namespace to use; only relevant for data formats that use
namespaces (like XML).
/**
* Optional namespace to use; only relevant for data formats that use
* namespaces (like XML).
*/
public String propNamespace() default "";
When to include attribute-property. Default value indicates that
property should only be written if specified attribute has a non-null
value.
/**
* When to include attribute-property. Default value indicates that
* property should only be written if specified attribute has a non-null
* value.
*/
public JsonInclude.Include include() default JsonInclude.Include.NON_NULL;
Metadata about property, similar to JsonProperty.required()
. /**
* Metadata about property, similar to
* {@link com.fasterxml.jackson.annotation.JsonProperty#required()}.
*/
public boolean required() default false;
}
Definition of a single general virtual property.
/**
* Definition of a single general virtual property.
*/
public @interface Prop
{
Actual implementation class (a subtype of VirtualBeanPropertyWriter
) of the property to instantiate (using the no-argument default constructor). /**
* Actual implementation class (a subtype of {@link VirtualBeanPropertyWriter})
* of the property to instantiate (using the no-argument default constructor).
*/
public Class<? extends VirtualBeanPropertyWriter> value();
Name of the property to possibly use for serializing (although implementation
may choose to not use this information).
/**
* Name of the property to possibly use for serializing (although implementation
* may choose to not use this information).
*/
public String name() default "";
Optional namespace to use along with name
; only relevant for data formats that use namespaces (like XML). /**
* Optional namespace to use along with {@link #name};
* only relevant for data formats that use namespaces (like XML).
*/
public String namespace() default "";
When to include value of the property. Default value indicates that
property should only be written if specified attribute has a non-null
value. As with other properties, actual property implementation may or may
not choose to use this inclusion information.
/**
* When to include value of the property. Default value indicates that
* property should only be written if specified attribute has a non-null
* value. As with other properties, actual property implementation may or may
* not choose to use this inclusion information.
*/
public JsonInclude.Include include() default JsonInclude.Include.NON_NULL;
Metadata about property, similar to JsonProperty.required()
. /**
* Metadata about property, similar to
* {@link com.fasterxml.jackson.annotation.JsonProperty#required()}.
*/
public boolean required() default false;
Nominal type of the property. Passed as type information for related
virtual objects, and may (or may not be) used by implementation
for choosing serializer to use.
/**
* Nominal type of the property. Passed as type information for related
* virtual objects, and may (or may not be) used by implementation
* for choosing serializer to use.
*/
public Class<?> type() default Object.class;
}
}