Dropwizard Jersey Support - Jersey integration module for the Dropwizard Java framework
npx @tessl/cli install tessl/maven-io-dropwizard--dropwizard-jersey@4.0.0Dropwizard 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.
pom.xml:<dependency>
<groupId>io.dropwizard</groupId>
<artifactId>dropwizard-jersey</artifactId>
<version>4.0.14</version>
</dependency>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;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);
}
}Dropwizard Jersey is built around several key components:
DropwizardResourceConfig extends Jersey's ResourceConfig with Dropwizard-specific providers and featuresJerseyEnvironment provides a simplified interface for Jersey configurationErrorMessage format and exception mappersCore 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();
}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);
}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();
}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);
}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);
}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);
}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);
}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);
}// 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 {
}