Как настроить 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.

Другие вопросы по тегам