package io.dropwizard.jersey.jackson;
import com.fasterxml.jackson.annotation.JsonIgnoreType;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider;
import javax.annotation.Nullable;
import javax.ws.rs.core.MediaType;
import java.lang.annotation.Annotation;
import java.lang.reflect.Type;
public class JacksonMessageBodyProvider extends JacksonJaxbJsonProvider {
private final ObjectMapper mapper;
public JacksonMessageBodyProvider(ObjectMapper mapper) {
this.mapper = mapper;
setMapper(mapper);
}
@Override
public boolean isReadable(Class<?> type,
@Nullable Type genericType,
@Nullable Annotation[] annotations,
@Nullable MediaType mediaType) {
return isProvidable(type) && super.isReadable(type, genericType, annotations, mediaType);
}
@Override
public boolean isWriteable(Class<?> type,
@Nullable Type genericType,
@Nullable Annotation[] annotations,
@Nullable MediaType mediaType) {
return isProvidable(type) && super.isWriteable(type, genericType, annotations, mediaType);
}
private boolean isProvidable(Class<?> type) {
final JsonIgnoreType ignore = type.getAnnotation(JsonIgnoreType.class);
return (ignore == null) || !ignore.value();
}
public ObjectMapper getObjectMapper() {
return mapper;
}
}