Решение с JacksonJaxbJsonProvider
Распространенным способом использования Джексона с пользовательской конфигурацией в клиенте Джерси было использование JacksonJaxbJsonProvider
, например, вот так
JacksonJaxbJsonProvider provider = new JacksonJaxbJsonProvider();
provider.setMapper(yourObjectMapper());
Client client = ClientBuilder.newClient(new ClientConfig(provider));
К сожалению, в Джерси 2.26 они скопировали JacksonJaxbJsonProvider
класс из com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider
артефакта (Джексон) в org.glassfish.jersey.media:jersey-media-json-jackson
артефакт (Джерси) и изменили пакет с com.fasterxml.jackson.jaxrs.json
на org.glassfish.jersey.jackson.internal.jackson.jaxrs.json
.
Это все еще возможноиспользуйте этот подход, просто нужно изменить JacksonJaxbJsonProvider
import.
Помимо JacksonJaxbJsonProvider
, присутствующего в internal
недостатком пакета является также то, что вы должны знать, на какой версии Jersey работает ваш код, что может быть проблемойкогда разные зависимости требуют разных версий Джерси.
Лучшее решение с ContextResolver<ObjectMapper>
Лучшая возможность настроить Джексона в Джерси клиент - использовать тот же способ, что инастроенный в Джерси сервер , который должен создать ObjectMapper
провайдера следующим образом:
@Provider
@Produces(MediaType.APPLICATION_JSON)
public class ObjectMapperProvider implements ContextResolver<ObjectMapper> {
private ObjectMapper objectMapper = yourObjectMapper();
@Override
public ObjectMapper getContext(Class<?> objectType) {
return objectMapper;
}
}
и использовать его, например, следующим образом:
ClientConfig clientConfig = new ClientConfig();
clientConfig.register(JacksonFeature.class); // usually auto-discovered
clientConfig.register(new ObjectMapperProvider());
Client client = ClientBuilder.newClient(clientConfig);
Если у вас естьоба сервераи клиент, вы можете повторно использовать ObjectMapperProvider
класс.
Кажется, что этот подход работает с Джерси версии 2.9.