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.
89 lines
2.6 KiB
89 lines
2.6 KiB
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 to indicate that a property should be serialized |
|
* "unwrapped"; that is, if it would be serialized as JSON Object, its |
|
* properties are instead included as properties of its containing |
|
* Object. For example, consider case of POJO like: |
|
* |
|
*<pre> |
|
* public class Parent { |
|
* public int age; |
|
* public Name name; |
|
* } |
|
* public class Name { |
|
* public String first, last; |
|
* } |
|
*</pre> |
|
* which would normally be serialized as follows (assuming @JsonUnwrapped |
|
* had no effect): |
|
*<pre> |
|
* { |
|
* "age" : 18, |
|
* "name" : { |
|
* "first" : "Joey", |
|
* "last" : "Sixpack" |
|
* } |
|
* } |
|
*</pre> |
|
* can be changed to this: |
|
*<pre> |
|
* { |
|
* "age" : 18, |
|
* "first" : "Joey", |
|
* "last" : "Sixpack" |
|
* } |
|
*</pre> |
|
* by changing Parent class to: |
|
*<pre> |
|
* public class Parent { |
|
* public int age; |
|
* @JsonUnwrapped |
|
* public Name name; |
|
* } |
|
*</pre> |
|
* Annotation can only be added to properties, and not classes, as it is contextual. |
|
*<p> |
|
* Also note that annotation only applies if |
|
*<ul> |
|
* <li>Value is serialized as JSON Object (can not unwrap JSON arrays using this |
|
* mechanism) |
|
* </li> |
|
* <li>Serialization is done using <code>BeanSerializer</code>, not a custom serializer |
|
* </li> |
|
* <li>No type information is added; if type information needs to be added, structure can |
|
* not be altered regardless of inclusion strategy; so annotation is basically ignored. |
|
* </li> |
|
* </ul> |
|
*/ |
|
@Target({ElementType.ANNOTATION_TYPE, ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER}) |
|
@Retention(RetentionPolicy.RUNTIME) |
|
@JacksonAnnotation |
|
public @interface JsonUnwrapped |
|
{ |
|
/** |
|
* Property that is usually only used when overriding (masking) annotations, |
|
* using mix-in annotations. Otherwise default value of 'true' is fine, and |
|
* value need not be explicitly included. |
|
*/ |
|
boolean enabled() default true; |
|
|
|
/** |
|
* Optional property that can be used to add prefix String to use in front |
|
* of names of properties that are unwrapped: this can be done for example to prevent |
|
* name collisions. |
|
*/ |
|
String prefix() default ""; |
|
|
|
/** |
|
* Optional property that can be used to add suffix String to append at the end |
|
* of names of properties that are unwrapped: this can be done for example to prevent |
|
* name collisions. |
|
*/ |
|
String suffix() default ""; |
|
}
|
|
|