Как я могу игнорировать нераспознанные свойства, используя javax.ws.rs.client.Invocation.Builder?

Я создал веб-клиент, который использует SSL.

Клиент инициализируется так:

SSLContext sc = SSLContext.getInstance("ssl");
        sc.init(null, noopTrustManager, null);
        
        this.client = ClientBuilder.newBuilder().
                sslContext(sc).
                build();

Затем веб-цель инициализируется следующим образом:

this.webTarget = this.client.target(urlAddress);

И Invocation Builder инициализируется следующим образом:

Builder request = this.webTarget.request();

Но когда - после правильной настройки заголовков - я пытаюсь сделать это:

request.get(InitiateTransferResponse.class);

Я получаю следующее сообщение об ошибке:

javax.ws.rs.client.ResponseProcessingException: com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: временная метка нераспознанного поля (класс com.interaxa.ivr.visual.moa.service.model.InitiateTransferResponse), не отмеченная как игнорируемая

Есть ли способ сказать разработчику игнорировать все нераспознанные свойства? (Я намерен использовать этот же конструктор и для других веб-сервисов, и было бы неплохо, если бы я мог настроить его на постоянное игнорирование неизвестных свойств, независимо от класса ответа).

Заранее спасибо.


person Gabriela    schedule 11.01.2021    source источник


Ответы (1)


Я нашел решение!

Ключ должен заменить строку: request.get(InitiateTransferResponse.class);

По этому коду:

        InitiateTransferResponse result;
        try {
            result = getMapper().readValue(response, InitiateTransferResponse.class);
        } 
        catch (IOException e) {
            ViewFactory.logError(e);
            result = null;
        }

Где getMapper() выглядит следующим образом:

public ObjectMapper getMapper() {
        if (mapper == null){
            mapper = new ObjectMapper();
            mapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
            mapper.configure(DeserializationConfig.Feature.FAIL_ON_NULL_FOR_PRIMITIVES, false);
            mapper.setSerializationInclusion(Inclusion.NON_NULL);
        }
        return mapper;
}

А ObjectMapper — это org.codehaus.jackson.map.ObjectMapper.

Таким образом, ObjectMapper контролирует, что он пропускает, а не оставляет это решение за Builder.

person Gabriela    schedule 13.01.2021