or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

error-handling.mdframework-configuration.mdhttp-caching.mdindex.mdjsr310-parameters.mdoptional-handling.mdparameter-handling.mdsession-management.mdvalidation.md
tile.json

tessl/maven-io-dropwizard--dropwizard-jersey

Dropwizard Jersey Support - Jersey integration module for the Dropwizard Java framework

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

To install, run

npx @tessl/cli install tessl/maven-io-dropwizard--dropwizard-jersey@4.0.0

index.mddocs/

Dropwizard Jersey

Dropwizard Jersey provides comprehensive Jersey REST framework integration for Dropwizard applications. It offers type-safe parameter converters, session management, validation integration, optional handling, standardized error handling, HTTP caching, GZIP compression, and Jackson JSON processing to build robust RESTful web services.

Package Information

  • Package Name: dropwizard-jersey
  • Package Type: maven
  • Language: Java
  • Installation: Add to pom.xml:
<dependency>
    <groupId>io.dropwizard</groupId>
    <artifactId>dropwizard-jersey</artifactId>
    <version>4.0.14</version>
</dependency>

Core Imports

import io.dropwizard.jersey.DropwizardResourceConfig;
import io.dropwizard.jersey.setup.JerseyEnvironment;
import io.dropwizard.jersey.params.*;
import io.dropwizard.jersey.sessions.Session;
import io.dropwizard.jersey.sessions.Flash;
import io.dropwizard.jersey.validation.Validators;
import io.dropwizard.jersey.caching.CacheControl;
import io.dropwizard.jersey.PATCH;

Basic Usage

import io.dropwizard.jersey.DropwizardResourceConfig;
import io.dropwizard.jersey.setup.JerseyEnvironment;
import io.dropwizard.jersey.params.UUIDParam;
import io.dropwizard.jersey.sessions.Session;
import io.dropwizard.jersey.caching.CacheControl;
import io.dropwizard.jersey.PATCH;

import jakarta.servlet.http.HttpSession;
import jakarta.ws.rs.*;
import jakarta.ws.rs.core.MediaType;
import java.util.UUID;
import java.util.concurrent.TimeUnit;

// Configure Jersey with Dropwizard enhancements
DropwizardResourceConfig config = new DropwizardResourceConfig();
JerseyEnvironment jersey = new JerseyEnvironment(holder, config);

// Register a resource
jersey.register(UserResource.class);

@Path("/users")
@Produces(MediaType.APPLICATION_JSON)
public class UserResource {
    
    // Type-safe parameter handling
    @GET
    @Path("/{id}")
    public User getUser(@PathParam("id") UUIDParam userId) {
        UUID id = userId.get(); // Automatic parsing and validation
        return userService.findById(id);
    }
    
    // Session management
    @POST
    @Path("/{id}/preferences")
    public void savePreferences(@PathParam("id") UUIDParam userId,
                               @Session HttpSession session,
                               UserPreferences prefs) {
        session.setAttribute("userId", userId.get());
        userService.savePreferences(userId.get(), prefs);
    }
    
    // HTTP caching
    @GET
    @Path("/public")
    @CacheControl(maxAge = 300, maxAgeUnit = TimeUnit.SECONDS)
    public List<User> getPublicUsers() {
        return userService.getPublicUsers();
    }
    
    // PATCH method support
    @PATCH
    @Path("/{id}")
    public User updateUser(@PathParam("id") UUIDParam userId, 
                          UserUpdate update) {
        return userService.updateUser(userId.get(), update);
    }
}

Architecture

Dropwizard Jersey is built around several key components:

  • Resource Configuration: DropwizardResourceConfig extends Jersey's ResourceConfig with Dropwizard-specific providers and features
  • Environment Facade: JerseyEnvironment provides a simplified interface for Jersey configuration
  • Parameter System: Type-safe parameter converters for common types with automatic validation and error handling
  • Session Integration: HTTP session support with flash message capabilities for web applications
  • Validation Framework: Hibernate Validator integration with JAX-RS for request/response validation
  • Error Handling: Standardized error responses with ErrorMessage format and exception mappers
  • Optional Handling: Support for Java 8 Optional and Guava Optional types with automatic 404 responses for empty values
  • JSR310 Support: Date/time parameter converters for modern Java time API

Capabilities

Framework Configuration

Core Jersey framework integration providing the main configuration classes and environment setup for Dropwizard applications.

public class DropwizardResourceConfig extends ResourceConfig {
    public DropwizardResourceConfig();
    public DropwizardResourceConfig(MetricRegistry metricRegistry);
    public static DropwizardResourceConfig forTesting();
    public static DropwizardResourceConfig forTesting(MetricRegistry metricRegistry);
    public String getUrlPattern();
    public void setUrlPattern(String urlPattern);
    public String getContextPath();
    public void setContextPath(String contextPath);
    public ResourceConfig register(Object component);
}

public class JerseyEnvironment {
    public void register(Object component);
    public void register(Class<?> componentClass);
    public void packages(String... packages);
    public void enable(String featureName);
    public void disable(String featureName);
    public void property(String name, Object value);
    public <T> T getProperty(String name);
    public DropwizardResourceConfig getResourceConfig();
}

Framework Configuration

Parameter Handling

Type-safe parameter converters for common data types with automatic parsing, validation, and error handling for JAX-RS resource methods.

public abstract class AbstractParam<T> {
    protected AbstractParam(String input);
    protected AbstractParam(String input, String parameterName);
    public T get();
    protected abstract T parse(String input) throws Exception;
    protected String errorMessage(Exception e);
}

public class UUIDParam extends AbstractParam<UUID> {
    public UUIDParam(String input);
    public UUIDParam(String input, String parameterName);
}

public class IntParam extends AbstractParam<Integer> {
    public IntParam(String input);
    public IntParam(String input, String parameterName);
}

public class LongParam extends AbstractParam<Long> {
    public LongParam(String input);
    public LongParam(String input, String parameterName);
}

public class NonEmptyStringParam extends AbstractParam<String> {
    public NonEmptyStringParam(String input);
    public NonEmptyStringParam(String input, String parameterName);
}

Parameter Handling

Session Management

HTTP session integration with injection support and flash message capabilities for web applications requiring session state.

@Target({ElementType.PARAMETER, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Session {
    boolean doNotCreate() default false;
}

public class Flash<T> {
    public Optional<T> get();
    public void set(T value);
}

public class HttpSessionFactory implements Factory<HttpSession> {
    public HttpSession provide();
}

public class FlashFactory implements Factory<Flash<?>> {
    public Flash<?> provide();
}

Session Management

Error Handling

Standardized error handling with consistent error message format and exception mappers for common exceptions.

public class ErrorMessage {
    public ErrorMessage(String message);
    public ErrorMessage(int code, String message);
    public ErrorMessage(int code, String message, String details);
    public Integer getCode();
    public String getMessage();
    public String getDetails();
}

public class LoggingExceptionMapper<E extends Throwable> implements ExceptionMapper<E> {
    public Response toResponse(E exception);
}

public class IllegalStateExceptionMapper implements ExceptionMapper<IllegalStateException> {
    public Response toResponse(IllegalStateException exception);
}

Error Handling

Validation

Hibernate Validator integration providing comprehensive validation support for JAX-RS resources with custom parameter extractors.

public class Validators {
    public static Validator newValidator();
    public static ValidatorFactory newValidatorFactory();
    public static HibernateValidatorConfiguration newConfiguration();
}

public class JerseyViolationException extends ValidationException {
    public JerseyViolationException(Set<ConstraintViolation<?>> violations);
    public Set<ConstraintViolation<?>> getConstraintViolations();
}

public class ValidationErrorMessage {
    public List<String> getErrors();
    public ValidationErrorMessage(Collection<String> errors);
}

Validation

Optional Handling

Support for Java 8 Optional and Guava Optional types with automatic serialization and 404 responses for empty values.

public class OptionalMessageBodyWriter implements MessageBodyWriter<Optional<?>> {
    public boolean isWriteable(Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType);
    public void writeTo(Optional<?> entity, Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType, MultivaluedMap<String, Object> httpHeaders, OutputStream entityStream);
}

public class EmptyOptionalException extends WebApplicationException {
    public EmptyOptionalException();
    public EmptyOptionalException(String message);
}

public class OptionalIntMessageBodyWriter implements MessageBodyWriter<OptionalInt> {
    public void writeTo(OptionalInt entity, Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType, MultivaluedMap<String, Object> httpHeaders, OutputStream entityStream);
}

Optional Handling

HTTP Caching

HTTP caching support through annotations with comprehensive Cache-Control header configuration for optimizing web service performance.

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface CacheControl {
    boolean immutable() default false;
    boolean isPrivate() default false;
    boolean noCache() default false;
    boolean noStore() default false;
    boolean noTransform() default true;
    boolean mustRevalidate() default false;
    boolean proxyRevalidate() default false;
    int maxAge() default -1;
    TimeUnit maxAgeUnit() default TimeUnit.SECONDS;
    int staleWhileRevalidate() default -1;
    TimeUnit staleWhileRevalidateUnit() default TimeUnit.SECONDS;
    int sharedMaxAge() default -1;
    TimeUnit sharedMaxAgeUnit() default TimeUnit.SECONDS;
}

public class CacheControlledResponseFeature implements Feature {
    public boolean configure(FeatureContext context);
}

HTTP Caching

JSR310 Date/Time Parameters

Parameter converters for Java 8 date/time API types providing type-safe parsing of date and time values from HTTP requests.

public class InstantParam extends AbstractParam<Instant> {
    public InstantParam(String input);
    public InstantParam(String input, String parameterName);
}

public class LocalDateParam extends AbstractParam<LocalDate> {
    public LocalDateParam(String input);
    public LocalDateParam(String input, String parameterName);
}

public class LocalDateTimeParam extends AbstractParam<LocalDateTime> {
    public LocalDateTimeParam(String input);
    public LocalDateTimeParam(String input, String parameterName);
}

public class ZonedDateTimeParam extends AbstractParam<ZonedDateTime> {
    public ZonedDateTimeParam(String input);
    public ZonedDateTimeParam(String input, String parameterName);
}

JSR310 Date/Time Parameters

Types

// Common interfaces
public interface Factory<T> {
    T provide();
}

// Exception types
public class WebApplicationException extends RuntimeException {
    public WebApplicationException(String message, int status);
    public WebApplicationException(String message, Response.Status status);
}

// Validation types  
public interface ConstraintViolation<T> {
    String getMessage();
    String getPropertyPath();
    T getRootBean();
    Object getInvalidValue();
}

// Time units for caching
public enum TimeUnit {
    NANOSECONDS, MICROSECONDS, MILLISECONDS, SECONDS, MINUTES, HOURS, DAYS;
}

// HTTP method annotation
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@HttpMethod("PATCH")
public @interface PATCH {
}