All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.fasterxml.jackson.annotation.JsonProperty Maven / Gradle / Ivy

The newest version!
/*
 * Copyright © 2019 Dominokit
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
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;

/**
 * Marker annotation that can be used to define a non-static method as a "setter" or "getter" for a
 * logical property (depending on its signature), or non-static object field to be used (serialized,
 * deserialized) as a logical property.
 *
 * 

Default value ("") indicates that the field name is used as the property name without any * modifications, but it can be specified to non-empty value to specify different name. Property * name refers to name used externally, as the field name in JSON objects. * *

Starting with Jackson 2.6 this annotation may also be used to change serialization of * Enum like so: * *

 * public enum MyEnum {
 * {@literal @JsonProperty}("theFirstValue") THE_FIRST_VALUE,
 * {@literal @JsonProperty}("another_value") ANOTHER_VALUE;
 * }
 * 
* * as an alternative to using {@link JsonValue} annotation. */ @Target({ElementType.ANNOTATION_TYPE, ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER}) @Retention(RetentionPolicy.RUNTIME) @JacksonAnnotation public @interface JsonProperty { /** * Special value that indicates that handlers should use the default name (derived from method or * field name) for property. * * @since 2.1 */ public static final String USE_DEFAULT_NAME = ""; /** * Marker value used to indicate that no index has been specified. Used as the default value as * annotations do not allow "missing" values. * * @since 2.4 */ public static final int INDEX_UNKNOWN = -1; /** * Defines name of the logical property, i.e. JSON object field name to use for the property. If * value is empty String (which is the default), will try to use name of the field that is * annotated. Note that there is no default name available for constructor arguments, * meaning that Empty String is not a valid value for constructor arguments. * * @return String */ String value() default USE_DEFAULT_NAME; /** * Property that indicates whether a value (which may be explicit null) is expected for property * during deserialization or not. If expected, BeanDeserialized should indicate this * as a validity problem (usually by throwing an exception, but this may be sent via problem * handlers that can try to rectify the problem, for example, by supplying a default value). * *

Note that as of 2.6, this property is only used for Creator Properties, to ensure existence * of property value in JSON: for other properties (ones injected using a setter or mutable * field), no validation is performed. Support for those cases may be added in future. State of * this property is exposed via introspection, and its value is typically used by Schema * generators, such as one for JSON Schema. * * @since 2.0 * @return boolean */ boolean required() default false; /** * Property that indicates numerical index of this property (relative to other properties * specified for the Object). This index is typically used by binary formats, but may also be * useful for schema languages and other tools. * * @since 2.4 * @return int */ int index() default INDEX_UNKNOWN; /** * Property that may be used to document expected default value for the property: most * often used as source information for generating schemas (like JSON Schema or protobuf/thrift * schema), or documentation. It may also be used by Jackson extension modules; core jackson * databind does not have any automated handling beyond simply exposing this value through bean * property introspection. * *

It is possible that in future this annotation could be used for value defaulting, and * especially for default values of Creator properties, since they support {@link #required()} in * 2.6 and above. * * @since 2.5 * @return String */ String defaultValue() default ""; /** * Optional property that may be used to change the way visibility of accessors (getter, * field-as-getter) and mutators (contructor parameter, setter, field-as-setter) is determined, * either so that otherwise non-visible accessors (like private getters) may be used; or that * otherwise visible accessors are ignored. * *

Default value os {@link Access#AUTO} which means that access is determined solely based on * visibility and other annotations. * * @since 2.6 * @return {@link Access} */ Access access() default Access.AUTO; /** * Various options for {@link #access} property, specifying how property may be accessed during * serialization ("read") and deserialization ("write") (note that the direction of read and write * is from perspective of the property, not from external data format: this may be confusing in * some contexts). * *

Note that while this annotation modifies access to annotated property, its effects may be * further overridden by {@link JsonIgnore} property: if both annotations are present on an * accessors, {@link JsonIgnore} has precedence over this property. This annotation property is, * however, preferred over use of "split" {@link JsonIgnore}/JsonProperty * combination. * * @since 2.6 */ public enum Access { /** * Access setting which means that visibility rules are to be used to automatically determine * read- and/or write-access of this property. */ AUTO, /** * Access setting that means that the property may only be read for serialization, but not * written (set) during deserialization. */ READ_ONLY, /** * Access setting that means that the property may only be written (set) for deserialization, * but will not be read (get) on serialization, that is, the value of the property is not * included in serialization. */ WRITE_ONLY, /** * Access setting that means that the property will be accessed for both serialization (writing * out values as external representation) and deserialization (reading values from external * representation), regardless of visibility rules. */ READ_WRITE; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy