2016-06-09 62 views
0

调用RestTemplate方法RestTemplate RestClientException无法提取响应:没有合适的HttpMessageConverter发现

GetStatusRestfulResponse response = restTemplate.getForObject(restRequest.getUrl(), GetStatusRestfulResponse.class,restRequest.getParams()); 

>org.springframework.web.client.RestClientException: Could not extract response: no suitable HttpMessageConverter found for response type [class GetStatusRestfulResponse] and content type [application/json] 
at org.springframework.web.client.HttpMessageConverterExtractor.extractData(HttpMessageConverterExtractor.java:108) 
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:550) 
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:511) 
at org.springframework.web.client.RestTemplate.getForObject(RestTemplate.java:248) 

RestTemplate restTemplate = new RestTemplate(); 
    HttpClient httpClient = HttpClientBuilder.create().setDefaultCredentialsProvider(setupAuthentication(restRequest)).build(); 
    HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(httpClient); 
    requestFactory.setReadTimeout(restRequest.getReqTimeOut()); 
    restTemplate.setRequestFactory(requestFactory); 
    restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter()); 
response = restTemplate.getForObject(restRequest.getUrl(),  GetStatusRestfulResponse.class,restRequest.getParams());  

回答

2

我能解决这个问题,当我得到这个错误。罪魁祸首是我使用GetStatusRestfulResponse的java对象。 我采取了以下步骤来调试问题。

  1. 得到spring-web和jackson-databind的源代码。
  2. 关于在spring和jackson源代码中调试,意识到问题在于ObjectMapper无法反序列化java对象。
  3. 问题是我的Java对象有内部类。

,以解决与ObjectMapper无法反序列化Java对象的问题,我不得不

  1. 添加默认主Java类和内部类无参数的构造函数。

  2. 使内部类变为静态。

这个解决问题:)

相关问题