2016-11-21 76 views
0

在Spring應用程序,我打電話給第三方服務,我發送XML請求並獲取XML響應我,我得到的XML響應正確時無法解析響應轉換成Java對象,我收到以下錯誤:Rest模板:無法提取響應:沒有合適的HttpMessageConverter發現響應類型時,我們得到的XML響應,而不是綁定到JAVA對象

org.springframework.web.client.RestClientException: Could not extract response: no suitable HttpMessageConverter found for response type [class com.drf.fundingapi.model.response.pojo.Fmxresponse] and content type [text/html;charset=ISO-8859-1] 
    at org.springframework.web.client.HttpMessageConverterExtractor.extractData(HttpMessageConverterExtractor.java:109) ~[spring-web-4.3.4.RELEASE.jar:4.3.4.RELEASE] 
    at org.springframework.web.client.RestTemplate$ResponseEntityResponseExtractor.extractData(RestTemplate.java:884) ~[spring-web-4.3.4.RELEASE.jar:4.3.4.RELEASE] 
    at org.springframework.web.client.RestTemplate$ResponseEntityResponseExtractor.extractData(RestTemplate.java:868) ~[spring-web-4.3.4.RELEASE.jar:4.3.4.RELEASE] 
    at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:622) ~[spring-web-4.3.4.RELEASE.jar:4.3.4.RELEASE] 
    at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:580) ~[spring-web-4.3.4.RELEASE.jar:4.3.4.RELEASE] 
    at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:498) ~[spring-web-4.3.4.RELEASE.jar:4.3.4.RELEASE] 
    at com.drf.fundingapi.apiclient.RestTemplateBase.performRequest(RestTemplateBase.java:17) ~[classes/:na] 
    at com.drf.fundingapi.apiclient.ApiClient.performPost(ApiClient.java:64) ~[classes/:na] 
    at com.drf.fundingapi.service.FundingService.getAccountBalanceRequest(FundingService.java:255) ~[classes/:na] 
    at com.drf.fundingapi.controller.FundingController.getGeneralOperationBalance(FundingController.java:100) ~[classes/:na] 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_101] 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_101] 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_101] 
    at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_101] 
    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:220) ~[spring-web-4.3.4.RELEASE.jar:4.3.4.RELEASE] 

我提出XML請求如下,

Fmxresponse fmxresponse = apiClient.performPost(url, MediaType.APPLICATION_XML_VALUE, requestData, new HashMap<String, String>(), Fmxresponse.class); 

Fmxresponse對象如下,

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlRootElement(name = "fmxresponse") 
public class Fmxresponse implements Serializable { 
    private static final long serialVersionUID = -4050582129050191456L; 
    @XmlElement(name = "response") 
    private Response response; 
    public Response getResponse() { 
     return response; 
    } 
    public void setResponse(Response response) { 
     this.response = response; 
    } 
    @Override 
    public String toString() { 
     return "ClassPojo [response = " + response + "]"; 
    } 
} 

在App.Config中

@Bean 
     public RestTemplate getRestTemplate(){ 
      RestTemplate restTemplate = new RestTemplate(); 

下面我們收到XML響應,

<?xml version="1.0" encoding="UTF-8"?> 
<fmxresponse> 
    <response> 
     <error> 
      <code>0</code> 
      <mesg></mesg> 
     </error> 
     <category>generaloperation</category> 
     <function>balance</function> 
     <result> 
      <balance> 
       <type>current</type> 
       <amount>50,000.00</amount> 
      </balance> 
      <balance> 
       <type>available</type> 
       <amount>50,000.00</amount> 
      </balance> 
     </result> 
    </response> 
</fmxresponse> 

任何一個能有什麼想法,什麼錯嗎?

回答

0

看起來您的回覆是text/html而不是text/xml

... and content type [text/html;charset=ISO-8859-1] 

您應該創建一個HttpMessageConverter來處理此內容類型,或者配置RestTemplate妥善處理響應。

有關如何配置RestTemplate實例的示例,請參見Force Spring RestTemplate to use XmlConverter

+0

感謝您的快速響應,但我仍然收到, org.springframework.web.client.RestClientException:無法寫入請求:找不到合適的HttpMessageConverter請求類型[java.lang.String]和內容類型[application/xml] – user1310038

+0

這是一個非常不同的錯誤。你的問題中的一個是關於閱讀一個回覆,而這個是寫一個請求。它說你不能寫'String'作爲'application/xml'。你添加了什麼,你在哪裏得到這個錯誤? – Adam

+0

我已添加 @Bean public RestTemplate getRestTemplate() { RestTemplate restTemplate = new RestTemplate(); List > messageConverters = new ArrayList >(); Jaxb2RootElementHttpMessageConverter jaxbMessageConverter = new Jaxb2RootElementHttpMessageConverter(); List mediaTypes = new ArrayList (); mediaTypes.add(MediaType.TEXT_HTML); jaxbMessageConverter.setSupportedMediaTypes(mediaTypes); messageConverters.add(jaxbMessageConverter); restTemplate.setMessageConverters(messageConverters); return restTemplate; } – user1310038

相關問題