Мы используем JAX-RS (реализация на Джерси) для вызова внешних систем. При создании клиента JAX-RS я регистрирую приведенный ниже преобразователь контекста для использования настраиваемого ObjectMapper:
public class JacksonObjectMapperProvider implements ContextResolver<ObjectMapper>
{
@Override
public ObjectMapper getContext(Class<?> type)
{
ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT, true);
mapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);
mapper.configure(DeserializationFeature.FAIL_ON_NULL_FOR_PRIMITIVES, false);
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
mapper.configure(SerializationFeature.WRITE_NULL_MAP_VALUES, false);
mapper.configure(SerializationFeature.WRITE_EMPTY_JSON_ARRAYS, true);
mapper.setSerializationInclusion(Include.NON_NULL);
return mapper;
}
}
Но я не хочу, чтобы ObjectMapper был определен в JacksonObjectMapperProvider. Я хочу, чтобы JacksonObjectMapperProvider мог извлекать его во время выполнения откуда-то или попросил кого-нибудь установить ObjectMapper на JacksonObjectMapperProvider.
Я не могу сделать что-то подобное ниже, потому что ObjectMapper определен в некотором экземпляре, который создает jax-rs Клиент. И здесь у меня нет ссылки на этот экземпляр:
public class JacksonObjectMapperProvider implements ContextResolver<ObjectMapper>
{
@Override
public ObjectMapper getContext(Class<?> type)
{
return someService.getObjectMapper();
}
}
Есть другой способ сделать это? Есть ли способ передать данные в JacksonObjectMapperProvider при регистрации на клиенте?