如何使用 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。
我构建了一个使用 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。