I use Jersey 2.9 and Jackson 2.5.1 to generate JSON responses on a RESTful API.
In order to provide a custom ObjectMapper
, I implement a ContextResolver
like so:
@Provider
public class ObjectMapperProvider implements ContextResolver<ObjectMapper> {
@Context UriInfo uriInfo;
private final ObjectMapper objectMapper;
public ObjectMapperProvider() {
objectMapper = new ObjectMapper();
objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
objectMapper.enable(SerializationFeature.INDENT_OUTPUT);
objectMapper.enable(SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS);
}
@Override
public ObjectMapper getContext(Class<?> type) {
// TODO: configure custom object mapper depending on query string params
return objectMapper;
}
}
It works great the first time I access the endpoint: the getContext
method is invoked and I perform custom configurations on the objectmapper (possibly returning a new one) depending on the query string provided by the user.
However, once the endpoint has been accessed once, Jersey seems to cache that object mapper and never ask for it again invoking getContext
. I need to disable or prevent this behavior since the query string might have changed and I might need to return a different object mapper for that request.
Is this possible??
Thank you!!