我已经建立了一个使用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);调用生成器的初始化方式如下:
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),类未标记为可忽略)
是否有一种方法可以告诉构建器忽略所有未识别的属性?(我也打算将这个构建器用于其他web服务,如果我可以将它设置为永久忽略未知属性,而不管响应类是什么,那就太好了)。
提前谢谢你。
发布于 2021-01-13 18:07:14
我找到了解决办法!
关键是替换行: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就可以控制它允许的内容,而不是把这个决定留给生成器。
https://stackoverflow.com/questions/65672325
复制相似问题