CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/maven-com-fasterxml-jackson-core--jackson-annotations

Core annotations used for value types, used by Jackson data binding package.

Pending
Overview
Eval results
Files

configuration.mddocs/

Configuration and Meta-Annotations

Auto-detection configuration, filtering, view support, and meta-annotation capabilities for creating custom annotation combinations.

Capabilities

JsonAutoDetect

Configure property auto-detection visibility levels for serialization and deserialization.

/**
 * Configure property auto-detection visibility levels
 * @param getterVisibility Visibility level for getter methods
 * @param isGetterVisibility Visibility level for is-getter methods  
 * @param setterVisibility Visibility level for setter methods
 * @param creatorVisibility Visibility level for creator methods/constructors
 * @param fieldVisibility Visibility level for fields
 */
@JsonAutoDetect(JsonAutoDetect.Visibility getterVisibility = JsonAutoDetect.Visibility.DEFAULT,
                JsonAutoDetect.Visibility isGetterVisibility = JsonAutoDetect.Visibility.DEFAULT,
                JsonAutoDetect.Visibility setterVisibility = JsonAutoDetect.Visibility.DEFAULT,
                JsonAutoDetect.Visibility creatorVisibility = JsonAutoDetect.Visibility.DEFAULT,
                JsonAutoDetect.Visibility fieldVisibility = JsonAutoDetect.Visibility.DEFAULT)
public @interface JsonAutoDetect {
    
    enum Visibility {
        /** Detect members with any visibility */
        ANY,
        
        /** Detect non-private members (public, protected, package) */
        NON_PRIVATE,
        
        /** Detect protected and public members only */
        PROTECTED_AND_PUBLIC,
        
        /** Detect public members only */
        PUBLIC_ONLY,
        
        /** Do not auto-detect any members */
        NONE,
        
        /** Use default detection rules */
        DEFAULT;
        
        public boolean isVisible(Member member);
    }
}

Usage Examples:

// Detect all fields regardless of visibility
@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY)
public class AllFieldsVisible {
    private String privateField;      // Will be serialized
    protected String protectedField;  // Will be serialized
    public String publicField;        // Will be serialized
}

// Only use explicitly annotated properties
@JsonAutoDetect(
    fieldVisibility = JsonAutoDetect.Visibility.NONE,
    getterVisibility = JsonAutoDetect.Visibility.NONE,
    setterVisibility = JsonAutoDetect.Visibility.NONE
)
public class ExplicitOnly {
    private String name;           // Won't be serialized
    private String description;    // Won't be serialized
    
    @JsonProperty
    private String title;          // Will be serialized (explicit annotation)
    
    @JsonGetter
    public String getName() {      // Will be serialized (explicit annotation)
        return name;
    }
}

// Custom visibility combinations
@JsonAutoDetect(
    fieldVisibility = JsonAutoDetect.Visibility.PROTECTED_AND_PUBLIC,
    getterVisibility = JsonAutoDetect.Visibility.PUBLIC_ONLY,
    setterVisibility = JsonAutoDetect.Visibility.ANY
)
public class MixedVisibility {
    private String privateField;      // Not serialized
    protected String protectedField;  // Serialized (field visibility)
    public String publicField;        // Serialized (field visibility)
    
    public String getPublicData() { return "data"; }    // Serialized (getter visibility)
    protected String getProtectedData() { return ""; }  // Not serialized (getter visibility)
    
    private void setPrivateValue(String value) { }      // Used for deserialization (setter visibility ANY)
}

JsonFilter

Specify filter ID for property filtering during serialization.

/**
 * Specify filter ID for property filtering
 * @param value Filter identifier used with SimpleFilterProvider
 */
@JsonFilter(String value)
public @interface JsonFilter;

Usage Examples:

@JsonFilter("userFilter")
public class User {
    private String username;
    private String email;
    private String password;
    private String ssn;
    private String internalId;
}

// Usage with ObjectMapper:
SimpleFilterProvider filters = new SimpleFilterProvider();
filters.addFilter("userFilter", 
    SimpleBeanPropertyFilter.filterOutAllExcept("username", "email"));

ObjectMapper mapper = new ObjectMapper();
mapper.setFilterProvider(filters);

// Only username and email will be serialized

JsonView

Define view classes for conditional property inclusion.

/**
 * Define view classes for property inclusion
 * @param value Array of view classes
 */
@JsonView(Class<?>[] value = {})
public @interface JsonView;

Usage Examples:

public class Views {
    public static class Public { }
    public static class Internal extends Public { }
    public static class Admin extends Internal { }
}

public class UserAccount {
    @JsonView(Views.Public.class)
    private String username;
    
    @JsonView(Views.Public.class)
    private String email;
    
    @JsonView(Views.Internal.class)
    private String fullName;
    
    @JsonView(Views.Internal.class)
    private LocalDateTime lastLogin;
    
    @JsonView(Views.Admin.class)
    private String passwordHash;
    
    @JsonView(Views.Admin.class)
    private List<String> permissions;
    
    // No view annotation - included in all views
    private String id;
}

// Usage:
ObjectMapper mapper = new ObjectMapper();

// Public view - only username, email, id
String publicJson = mapper.writerWithView(Views.Public.class)
    .writeValueAsString(user);

// Internal view - username, email, fullName, lastLogin, id
String internalJson = mapper.writerWithView(Views.Internal.class)
    .writeValueAsString(user);

// Admin view - all fields
String adminJson = mapper.writerWithView(Views.Admin.class)
    .writeValueAsString(user);

JsonPropertyOrder

Define property serialization order.

/**
 * Define property serialization order
 * @param value Array of property names in desired order
 * @param alphabetic Whether to order remaining properties alphabetically
 */
@JsonPropertyOrder(String[] value = {},
                   boolean alphabetic = false)
public @interface JsonPropertyOrder;

Usage Examples:

@JsonPropertyOrder({"id", "name", "email", "created"})
public class OrderedUser {
    private String email;
    private String name;
    private Long id;
    private LocalDateTime created;
    private String department;  // Will appear after the ordered properties
}

@JsonPropertyOrder(alphabetic = true)
public class AlphabeticalUser {
    private String username;
    private String email;
    private String firstName;
    private String lastName;
    // All properties will be ordered alphabetically
}

@JsonPropertyOrder(value = {"priority", "status"}, alphabetic = true)
public class MixedOrderUser {
    private String status;
    private String priority;
    private String username;    // Alphabetical after priority/status
    private String email;       // Alphabetical
    private String firstName;   // Alphabetical
}

JsonRootName

Define root element name when root wrapping is enabled.

/**
 * Define root wrapper name
 * @param value Root element name
 * @param namespace XML namespace for root element
 */
@JsonRootName(String value,
              String namespace = "")
public @interface JsonRootName;

Usage Examples:

@JsonRootName("user")
public class User {
    private String name;
    private String email;
}

// With root wrapping enabled:
// {"user": {"name": "John", "email": "john@email.com"}}

@JsonRootName(value = "product", namespace = "http://example.com/products")
public class Product {
    private String name;
    private BigDecimal price;
}

// With XML: <product xmlns="http://example.com/products"><name>...</name><price>...</price></product>

Meta-Annotations

JacksonAnnotation

Meta-annotation marking annotations as Jackson annotations.

/**
 * Meta-annotation marking Jackson annotations for processing
 */
@JacksonAnnotation
public @interface JacksonAnnotation;

JacksonAnnotationsInside

Meta-annotation for creating combination annotations.

/**
 * Meta-annotation for creating combo annotations containing multiple Jackson annotations
 */
@JacksonAnnotationsInside
public @interface JacksonAnnotationsInside;

Usage Examples:

// Custom combination annotation
@JacksonAnnotationsInside
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY)
public @interface FlexibleJson {
}

// Usage
@FlexibleJson
public class ApiResponse {
    private String status;
    private String message;
    private Object data;
    // Combines all the annotations from @FlexibleJson
}

// API-specific annotation
@JacksonAnnotationsInside
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonPropertyOrder({"id", "type", "attributes"})
@JsonView(Views.Public.class)
public @interface ApiResource {
}

@ApiResource
public class ResourceEntity {
    private Long id;
    private String type;
    private Map<String, Object> attributes;
}

Advanced Configuration Patterns

Global Auto-Detection Configuration

// Configure at class level
@JsonAutoDetect(
    fieldVisibility = JsonAutoDetect.Visibility.NONE,
    getterVisibility = JsonAutoDetect.Visibility.PUBLIC_ONLY,
    isGetterVisibility = JsonAutoDetect.Visibility.PUBLIC_ONLY,
    setterVisibility = JsonAutoDetect.Visibility.PUBLIC_ONLY,
    creatorVisibility = JsonAutoDetect.Visibility.PUBLIC_ONLY
)
public class RestrictedVisibility {
    // Only public getters/setters and explicitly annotated fields
}

// Or configure globally on ObjectMapper
ObjectMapper mapper = new ObjectMapper();
mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.NONE);
mapper.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.PUBLIC_ONLY);

Complex View Hierarchies

public class ViewHierarchy {
    public static class Basic { }
    public static class Detailed extends Basic { }
    public static class Admin extends Detailed { }
    
    public static class Export { }
    public static class AuditLog extends Export { }
}

public class Document {
    @JsonView({ViewHierarchy.Basic.class, ViewHierarchy.Export.class})
    private String title;
    
    @JsonView(ViewHierarchy.Detailed.class)
    private String content;
    
    @JsonView({ViewHierarchy.Admin.class, ViewHierarchy.AuditLog.class})
    private String createdBy;
    
    @JsonView(ViewHierarchy.AuditLog.class)
    private List<String> modifications;
}

Dynamic Filtering

@JsonFilter("dynamicFilter")
public class ConfigurableEntity {
    private String publicData;
    private String sensitiveData;
    private String internalData;
    private String adminData;
}

// Dynamic filter based on user role
public PropertyFilter createUserFilter(UserRole role) {
    switch (role) {
        case PUBLIC:
            return SimpleBeanPropertyFilter.filterOutAllExcept("publicData");
        case INTERNAL:
            return SimpleBeanPropertyFilter.serializeAllExcept("adminData");
        case ADMIN:
            return SimpleBeanPropertyFilter.serializeAll();
        default:
            return SimpleBeanPropertyFilter.filterOutAll();
    }
}

JsonAutoDetect.Value

Configuration class for programmatic auto-detection control.

/**
 * Value class for JsonAutoDetect configuration
 */
public static class JsonAutoDetect.Value implements JacksonAnnotationValue<JsonAutoDetect> {
    public static final JsonAutoDetect.Value DEFAULT;
    public static final JsonAutoDetect.Value NO_OVERRIDES;
    
    public static JsonAutoDetect.Value construct(
        JsonAutoDetect.Visibility getters,
        JsonAutoDetect.Visibility isGetters,
        JsonAutoDetect.Visibility setters,
        JsonAutoDetect.Visibility creators,
        JsonAutoDetect.Visibility fields);
    
    public JsonAutoDetect.Visibility getGetterVisibility();
    public JsonAutoDetect.Visibility getIsGetterVisibility();
    public JsonAutoDetect.Visibility getSetterVisibility();
    public JsonAutoDetect.Visibility getCreatorVisibility();
    public JsonAutoDetect.Visibility getFieldVisibility();
    
    public JsonAutoDetect.Value withGetterVisibility(JsonAutoDetect.Visibility v);
    public JsonAutoDetect.Value withIsGetterVisibility(JsonAutoDetect.Visibility v);
    public JsonAutoDetect.Value withSetterVisibility(JsonAutoDetect.Visibility v);
    public JsonAutoDetect.Value withCreatorVisibility(JsonAutoDetect.Visibility v);
    public JsonAutoDetect.Value withFieldVisibility(JsonAutoDetect.Visibility v);
}

JsonClassDescription

Provide human-readable descriptions for classes, used in JSON schema generation.

/**
 * Define human-readable description for annotated class
 * @param value Description text for the class
 */
@JsonClassDescription(String value = "")
public @interface JsonClassDescription;

Usage Examples:

@JsonClassDescription("Represents a user account in the system")
public class User {
    private String username;
    private String email;
}

@JsonClassDescription("Configuration settings for application features")
@JsonIgnoreProperties(ignoreUnknown = true)
public class AppConfig {
    private boolean debugMode;
    private String environment;
    private Map<String, Object> features;
}

@JsonClassDescription("API response wrapper with status and data")
public class ApiResponse<T> {
    private String status;
    private T data;
    private List<String> errors;
}

Install with Tessl CLI

npx tessl i tessl/maven-com-fasterxml-jackson-core--jackson-annotations

docs

configuration.md

formatting.md

inclusion-exclusion.md

index.md

object-creation.md

object-identity.md

object-structure.md

polymorphic-types.md

property-control.md

tile.json