or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

base-validation.mddata-size-validation.mdduration-validation.mdindex.mdmethod-validation.mdself-validation.mdvalue-validation.md
tile.json

tessl/maven-io-dropwizard--dropwizard-validation

Dropwizard Validation Support - provides enhanced validation capabilities for Dropwizard applications

Workspace
tessl
Visibility
Public
Created
Last updated
Describes
mavenpkg:maven/io.dropwizard/dropwizard-validation@3.0.x

To install, run

npx @tessl/cli install tessl/maven-io-dropwizard--dropwizard-validation@3.0.0

index.mddocs/

Dropwizard Validation

Dropwizard Validation provides comprehensive validation support for Dropwizard applications, extending beyond standard Jakarta Bean Validation (JSR-303) with custom validators and annotations. It includes specialized validators for Dropwizard-specific types such as Duration and DataSize ranges, port ranges, and value constraints, along with self-validation capabilities and advanced constraint violation handling.

Package Information

  • Package Name: dropwizard-validation
  • Package Type: Maven
  • Language: Java
  • Group ID: io.dropwizard
  • Artifact ID: dropwizard-validation
  • Installation: Add to your Maven pom.xml:
<dependency>
    <groupId>io.dropwizard</groupId>
    <artifactId>dropwizard-validation</artifactId>
    <version>3.0.14</version>
</dependency>

Core Imports

import io.dropwizard.validation.*;
import io.dropwizard.validation.selfvalidating.*;

For specific validation annotations:

import io.dropwizard.validation.DurationRange;
import io.dropwizard.validation.DataSizeRange;
import io.dropwizard.validation.OneOf;
import io.dropwizard.validation.PortRange;
import io.dropwizard.validation.Validated;

Basic Usage

import io.dropwizard.validation.*;
import io.dropwizard.util.Duration;
import io.dropwizard.util.DataSize;
import io.dropwizard.util.DataSizeUnit;
import javax.validation.constraints.NotNull;
import java.util.concurrent.TimeUnit;

public class ServerConfig {
    @NotNull
    @DurationRange(min = 1, max = 30, unit = TimeUnit.SECONDS)
    private Duration timeout;
    
    @DataSizeRange(min = 1, max = 1024, unit = DataSizeUnit.MEGABYTES)
    private DataSize maxFileSize;
    
    @PortRange(min = 8080, max = 9999)
    private int serverPort;
    
    @OneOf(value = {"development", "staging", "production"}, ignoreCase = true)
    private String environment;
    
    // getters and setters...
}

// Validate using standard Bean Validation
import javax.validation.Validator;
Validator validator = BaseValidator.newValidator();
Set<ConstraintViolation<ServerConfig>> violations = validator.validate(config);

Architecture

The validation framework is built on several key components:

  • Base Validation Utilities: Core validator factory and constraint violation utilities
  • Duration Validators: Validate Dropwizard Duration objects with time-based constraints
  • Data Size Validators: Validate Dropwizard DataSize objects with size-based constraints
  • Value Validators: Validate string and numeric values against allowed sets or ranges
  • Self-Validation Framework: Enable objects to define custom validation logic
  • Method Validation: Validate method parameters and return values with custom annotations

This modular design integrates seamlessly with Dropwizard's configuration system and JAX-RS resource validation, providing both declarative annotation-based validation and programmatic validation capabilities.

Capabilities

Base Validation Utilities

Core utilities for creating validators and formatting constraint violations, providing the foundation for all validation operations in Dropwizard applications.

public class BaseValidator {
    public static Validator newValidator();
    public static HibernateValidatorConfiguration newConfiguration();
}

public class ConstraintViolations {
    public static <T> String format(ConstraintViolation<T> v);
    public static <T> Collection<String> format(Set<ConstraintViolation<T>> violations);
    public static Collection<String> formatUntyped(Set<ConstraintViolation<?>> violations);
    public static <T> Set<ConstraintViolation<?>> copyOf(Set<ConstraintViolation<T>> violations);
}

Base Validation Utilities

Duration Validation

Specialized validation annotations and validators for Dropwizard Duration objects, supporting minimum, maximum, and range constraints with configurable time units.

@Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE})
@Retention(RUNTIME)
@Constraint(validatedBy = {})
public @interface DurationRange {
    long min() default 0;
    long max() default Long.MAX_VALUE;
    TimeUnit unit() default TimeUnit.SECONDS;
    String message() default "must be between {min} {unit} and {max} {unit}";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}

@Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE})
@Retention(RUNTIME)
@Constraint(validatedBy = MinDurationValidator.class)
public @interface MinDuration {
    long value();
    TimeUnit unit() default TimeUnit.SECONDS;
    boolean inclusive() default true;
    String message() default "must be greater than ${inclusive == true ? 'or equal to ' : ''}{value} {unit}";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}

@Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE})
@Retention(RUNTIME)
@Constraint(validatedBy = MaxDurationValidator.class)
public @interface MaxDuration {
    long value();
    TimeUnit unit() default TimeUnit.SECONDS;
    boolean inclusive() default true;
    String message() default "must be less than ${inclusive == true ? 'or equal to ' : ''}{value} {unit}";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}

Duration Validation

Data Size Validation

Validation annotations and validators for Dropwizard DataSize objects, enabling constraints on file sizes, memory limits, and other size-based configurations.

@Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE})
@Retention(RUNTIME)
@Constraint(validatedBy = {})
public @interface DataSizeRange {
    long min() default 0;
    long max() default Long.MAX_VALUE;
    DataSizeUnit unit() default DataSizeUnit.BYTES;
    String message() default "must be between {min} {unit} and {max} {unit}";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}

@Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE})
@Retention(RUNTIME)
@Constraint(validatedBy = MinDataSizeValidator.class)
public @interface MinDataSize {
    long value();
    DataSizeUnit unit() default DataSizeUnit.BYTES;
    String message() default "must be greater than or equal to {value} {unit}";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}

@Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE})
@Retention(RUNTIME)
@Constraint(validatedBy = MaxDataSizeValidator.class)
public @interface MaxDataSize {
    long value();
    DataSizeUnit unit() default DataSizeUnit.BYTES;
    String message() default "must be less than or equal to {value} {unit}";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}

Data Size Validation

Value Validation

Annotations for validating string values against allowed sets and numeric values against port ranges, with support for case-insensitive and whitespace-tolerant matching.

@Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE})
@Retention(RUNTIME)
@Constraint(validatedBy = OneOfValidator.class)
public @interface OneOf {
    String[] value();
    boolean ignoreCase() default false;
    boolean ignoreWhitespace() default false;
    String message() default "must be one of {value}";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}

@Target({METHOD, FIELD, ANNOTATION_TYPE, TYPE_USE})
@Retention(RUNTIME)
@Constraint(validatedBy = PortRangeValidator.class)
public @interface PortRange {
    int min() default 1;
    int max() default 65535;
    String message() default "{org.hibernate.validator.constraints.Range.message}";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}

Value Validation

Self-Validation Framework

A framework enabling objects to define custom validation logic through annotated methods, providing flexibility for complex business rules that cannot be expressed with standard validation annotations.

@Target({ElementType.TYPE, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = SelfValidatingValidator.class)
public @interface SelfValidating {
    String message() default "";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface SelfValidation {
}

public class ViolationCollector {
    public void addViolation(String message);
    public void addViolation(String message, Map<String, Object> messageParameters);
    public void addViolation(String propertyName, String message);
    public void addViolation(String propertyName, String message, Map<String, Object> messageParameters);
    public void addViolation(String propertyName, Integer index, String message);
    public void addViolation(String propertyName, Integer index, String message, Map<String, Object> messageParameters);
    public void addViolation(String propertyName, String key, String message);
    public void addViolation(String propertyName, String key, String message, Map<String, Object> messageParameters);
    public boolean hasViolationOccurred();
    public void setViolationOccurred(boolean violationOccurred);
    public ConstraintValidatorContext getContext();
}

Self-Validation Framework

Method Validation

Annotations and utilities for validating method parameters and enabling bean predicate validation, supporting advanced validation scenarios beyond field-level constraints.

@Target({PARAMETER, METHOD})
@Retention(RUNTIME)
public @interface Validated {
    Class<?>[] value() default {Default.class};
}

@Target({TYPE, ANNOTATION_TYPE, METHOD})
@Retention(RUNTIME)
@Constraint(validatedBy = MethodValidator.class)
public @interface ValidationMethod {
    String message() default "is not valid";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}

Method Validation

Types

// Core utility classes are part of the base validation capability
// Value extractors and interpolation helpers support the validation framework
// All validator implementations are internal and not part of the public API