Метод getContext () CustomContextResolver не вызывается Джексоном
Я борюсь с этой проблемой уже несколько дней и не знаю, как ее решить. Любая быстрая помощь будет благодарна. Мне нужно преобразовать LocalDate из строки JSON, которую я получаю из сборки службы REST, используя apache CXF и Джексона. Я написал собственный ContextResolver и зарегистрировал JavaTimeModule в объекте Mapper. Когда я запускаю приложение, вызывается конструктор по умолчанию, это означает, что оно было загружено, но метод getContext (), который возвращает ObjectMapper, никогда не вызывается.
Я зарегистрировал один и тот же ContextResolver на стороне сервера и клиента. Все зависимости на месте (привязка данных Джексона, ядро, аннотация, тип данных-jsr310).
Я могу получить ответ JSON, когда я нажимаю REST URI прямо в браузере. Проблема возникает, когда я вызываю тот же URI-аннотированный метод из клиентского кода. Ниже приведен мой клиентский код.
import javax.ws.rs.ext.ContextResolver;
import javax.ws.rs.ext.Provider;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
@Provider //makes this bean a Provider
public class LocalDateObjectMapperContextResolver implements ContextResolver<ObjectMapper>{
private final ObjectMapper MAPPER;
public LocalDateObjectMapperContextResolver() {
MAPPER = new ObjectMapper();
MAPPER.registerModule(new JavaTimeModule());
MAPPER.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
}
@Override
public ObjectMapper getContext(Class<?> type) {
return MAPPER;
}
}
<jaxrs:client id="testclient"
serviceClass="package1.RESTService"
username="abc"
password="abc"
address="$serviceURL">
<jaxrs:features>
<bean class="org.apache.cxf.transport.common.gzip.GZIPFeature"/>
<cxf:logging/>
</jaxrs:features>
<jaxrs:providers>
<bean class="org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider"/>
<bean class="mypackage.LocalDateObjectMapperContextResolver"/>
</jaxrs:providers>
</jaxrs:client>
Таким же образом, этот contextResolver регистрируется на стороне сервера также под
<jaxrs:server>
.....
<jaxrs:providers>
<bean class="org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider"/>
<bean class="mypackage.LocalDateObjectMapperContextResolver"/>
</jaxrs:providers>
</jaxrs:server>
Любая причина, почему getContext не вызывается?
Я также попытался расширить ObjectMapper и зарегистрировать javaTimeModule там, но не знаю, как зарегистрировать customObjectMapper в потоке Джексона. Я просто поместил конструктор по умолчанию для тестирования, и он вызывается при запуске приложения, но опять же, без результатов, я все еще получаю ту же ошибку.
Ошибка: не найден подходящий конструктор для типа [простой тип, класс java.time.LocalDate]: невозможно создать экземпляр объекта JSON (нужно добавить / включить информацию о типе?)