
com.yammer.dropwizard.jersey.JacksonMessageBodyProvider Maven / Gradle / Ivy
package com.yammer.dropwizard.jersey;
import com.fasterxml.jackson.annotation.JsonIgnoreType;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider;
import com.google.common.collect.ImmutableList;
import com.yammer.dropwizard.validation.InvalidEntityException;
import com.yammer.dropwizard.validation.Validated;
import com.yammer.dropwizard.validation.Validator;
import javax.validation.Valid;
import javax.validation.groups.Default;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.ext.Provider;
import java.io.IOException;
import java.io.InputStream;
import java.lang.annotation.Annotation;
import java.lang.reflect.Type;
/**
* A Jersey provider which enables using Jackson to parse request entities into objects and generate
* response entities from objects. Any request entity method parameters annotated with {@code
*
* @Valid} are validated, and an informative 422 Unprocessable Entity response is returned should
* the entity be invalid.
*
* (Essentially, extends {@link JacksonJaxbJsonProvider} with validation and support for {@link
* JsonIgnoreType}.)
*/
@Provider
public class JacksonMessageBodyProvider extends JacksonJaxbJsonProvider {
/**
* The default group array used in case any of the validate methods is called without a group.
*/
private static final Class>[] DEFAULT_GROUP_ARRAY = new Class>[]{ Default.class };
private final ObjectMapper mapper;
private final Validator validator;
public JacksonMessageBodyProvider(ObjectMapper mapper, Validator validator) {
this.validator = validator;
this.mapper = mapper;
setMapper(mapper);
}
@Override
public boolean isReadable(Class> type,
Type genericType,
Annotation[] annotations,
MediaType mediaType) {
return isProvidable(type) && super.isReadable(type, genericType, annotations, mediaType);
}
@Override
public Object readFrom(Class
© 2015 - 2025 Weber Informatics LLC | Privacy Policy