Как настроить ObjectMapper для клиента Quarkus REST
Я знаю, что ты можешь реализовать ObjectMapperCustomizer
, чтобы настроить преобразователь для службы Quarkus REST. Однако в документации по Quarkus REST Client не ясно, будет ли он использовать тот же (глобальный?) Сопоставитель или нет. И как вы справляетесь с ситуацией, когда внешняя служба имеет другое соглашение об именах JSON, чем ваша собственная? Я не могу найти способ настроить ObjectMapper для клиента REST. Я предполагаю, что вы, вероятно, сможете обойти это с помощью аннотаций Джексона, но я ищу способ сделать это, просто настроив ObjectMapper.
Итак, в основном вопрос: как мне настроить отдельный ObjectMapper для одного конкретного клиента REST?
1 ответ
Я столкнулся с той же проблемой. Путем проб и ошибок я нашел следующие работы:
Сначала определите класс, реализующий JAX-RS ContextResolver:
public class ClientObjectMapper implements ContextResolver<ObjectMapper> {
@Override
public ObjectMapper getContext(Class<?> type) {
ObjectMapper om = new ObjectMapper();
om.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
om.setSerializationInclusion(JsonInclude.Include.NON_NULL);
om.setPropertyNamingStrategy(PropertyNamingStrategy.UPPER_CAMEL_CASE);
return om;
}
}
Затем в вашем клиентском интерфейсе просто добавьте @RegisterProvider(ClientObjectMapper.class)
Судя по тестированию, которое я провел до сих пор, это будет иметь такой же эффект, как если бы вы вручную создавали HTTP-клиент с помощью ClientBuilder.