如何使用 javax.ws.rs.client.Invocation.Builder 忽略无法识别的属性?

How can I ignore unrecognized properties using javax.ws.rs.client.Invocation.Builder?

我构建了一个使用 SSL 的 Web 客户端。

客户端初始化如下:

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

然后web目标初始化如下:

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

Invocation Builder 初始化如下:

Builder request = this.webTarget.request();

但是当 - 在适当地设置 headers 之后 - 我尝试这样做:

request.get(InitiateTransferResponse.class);

我收到以下错误消息:

javax.ws.rs.client.ResponseProcessingException: com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "timestamp" (class com.interaxa.ivr.visual.moa.service.model.InitiateTransferResponse), not marked as ignorable

有没有办法告诉构建器忽略所有无法识别的属性? (我也打算将同一个构建器用于其他 Web 服务,如果我可以将它设置为永久忽略未知属性,而不管响应如何,那就太好了 class)。

提前致谢。

我找到了解决办法!

关键是替换行: 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。