需要调用一个接口,接口返回的类型为XML,返回的报文格式为如下所示
<?xml version="1.0"?>
<GD_COMPANY_RES>
<FieldTypes>
<GD_COMPANY_RES class="R">
<COMPANY type="CHAR"/>
<EFFDT type="DATE"/>
<EFF_STATUS type="CHAR"/>
<DESCR type="CHAR"/>
<DESCRSHORT type="CHAR"/>
<GD_OUT_DT type="DATE"/>
<GD_GLS_FLAG type="CHAR"/>
</GD_COMPANY_RES >
<PSCAMA class="R">
<LANGUAGE_CD type="CHAR"/>
<AUDIT_ACTN type="CHAR"/>
<BASE_LANGUAGE_CD type="CHAR"/>
<MSG_SEQ_FLG type="CHAR"/>
<PROCESS_INSTANCE type="NUMBER"/>
<PUBLISH_RULE_ID type="CHAR"/>
<MSGNODENAME type="CHAR"/>
</PSCAMA>
</FieldTypes>
</GD_COMPANY_RES>
发送请求函数为
AjaxResult result = doExcuteXml(SERVER_PRE, "/PSIGW/HttpListeningConnector?MessageName=GD_COMPANY_REQ&From=PSFT_HR_REMOTE", xmlStr);
doExcuteXml如下:
private AjaxResult doExcuteXml(String SERVER_PRE, String suffixUrl, String xmlStr) {
Map entityBody;
String uri = SERVER_PRE + suffixUrl;
HttpHeaders headers = new HttpHeaders();
headers.add("Content-Type", "text/html;charset=utf-8");
headers.setContentType(MediaType.APPLICATION_XML);// XML
ResponseEntity<Map> responseEntity = restTemplate.exchange(uri, HttpMethod.GET, new HttpEntity<>(xmlStr, headers), Map.class);
logger.debug("responseEntity:" + responseEntity);
entityBody = responseEntity.getBody();
logger.debug("entityBody:" + entityBody);
if (200 != (int) (entityBody.get("code"))) {
return AjaxResult.error(String.valueOf(entityBody.get("msg")));
}
return AjaxResult.success(entityBody);
}
}
这个接口是别人留下来的,现在调用doExcuteXml报错
Could not extract response: no suitable HttpMessageConverter found for response type [interface java.util.Map] and content type [text/xml;charset=UTF-8]]
我看着逻辑挺对的,想问是哪里的问题
返回值不能转换为map类型吧,restTemplate返回值改为String试下
看看当前的HttpMessageConverter是否支持解析text/xml这种响应数据,如果有,debug看解析细节,没有就自己注入一个实现类,专门去解析text/xml