package org.codehaus.jackson.annotate; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * Annotation that can be used to mark "setter" methods to indicate the * actual type of key Objects for the Map type that is value * of the property associated with the method. * This is usually done if the declared element type is abstract or * too generic; annotation can denote actual concrete type to * instantiate when deserializing contents of the container. * To define type of the actual container itself, use * {@link JsonClass} instead. *<p> * Note that the indicated type must be compatible with the declared * type; that is, it has to be a sub-type or implementation of * the declared type. This is usually the case; and if it wasn't * then the call to associated "setter" method would fail with * a type-mismatch exception. *<p> * Note: while any class can be indicated as the Key class, there * must be a registered Key Deserializer for the type. * * @deprecated As of version 1.1, use {@link org.codehaus.jackson.map.annotate.JsonDeserialize#keyAs} instead */ @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) @JacksonAnnotation public @interface JsonKeyClass { /** * Class that is the expected concrete value type of the container * (which is value of the property associated * with the annotated method). Will be used by deserializer to * instantiate the type, using *<p> * Note: if a non-property method is annotated with this annotation, * deserializer will throw an exception to denote invalid annotation. */ public Class<?> value(); }