RestClientException:无法提取响应找不到合适的HttpMessageConverter

【字号: 日期:2024-03-25浏览:31作者:雯心
(adsbygoogle = window.adsbygoogle || []).push({}); 如何解决RestClientException:无法提取响应找不到合适的HttpMessageConverter?

这里的主要问题是从服务接收到的 ,但是实际的内容类型应该是

为了克服这个问题,您可以引入自定义消息转换器。并为所有类型的响应注册它(即忽略响应内容类型标头)。像这样

List<HttpMessageConverter<?>> messageConverters = new ArrayList<HttpMessageConverter<?>>();//Add the Jackson Message converterMappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();// Note: here we are making this converter to process any kind of response, // not only application/*json, which is the default behavIoUrconverter.setSupportedMediaTypes(Collections.singletonList(MediaType.ALL));messageConverters.add(converter); restTemplate.setMessageConverters(messageConverters);解决方法

使用curl命令:

curl -u 591bf65f50057469f10b5fd9:0cf17f9b03d056ds0e11e48497e506a2 https://backend.tdk.com/api/devicetypes/59147fd79e93s12e61499ffe/messages

我收到JSON响应:

{'data':[{'device':'18SE62','time':1494516023,'data':'3235','snr':'36.72',...

我将响应保存在一个txt文件中,然后使用杰克逊进行解析,一切都很好

ObjectMapper mapper = new ObjectMapper();File f = new File(getClass().getResource ('/result.json').getFile());MessageList messageList = mapper.readValue(f,MessageList.class);

我认为我应该使用RestTemplate得到相同的结果,但事实并非如此

RestTemplate restTemplate = new RestTemplate();MessageList messageList = restTemplate.getForObject('http://592693f43c87815f9b8145e9:f099c85d84d4e325a2186c02bd0caeef@backend.tdk.com/api/devicetypes/591570373c87894b4eece34d/messages',MessageList.class);

我出现了错误

Exception in thread 'main' org.springframework.web.client.RestClientException: Could not extract response: no suitable HttpMessageConverter found for response type [class com.tdk.domain.backend.MessageList] and content type [text/html;charset=iso-8859-1] at org.springframework.web.client.HttpMessageConverterExtractor.extractData(HttpMessageConverterExtractor.java:109) at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:655) at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:613) at org.springframework.web.client.RestTemplate.getForObject(RestTemplate.java:287) at com.tdk.controllers.restful.client.RestTemplateExample.main(RestTemplateExample.java:27)

我试图设置contentType:

HttpHeaders headers = new HttpHeaders();headers.setContentType(MediaType.APPLICATION_JSON);HttpEntity<String> entity = new HttpEntity<String>('parameters',headers);MessageList messageList = restTemplate.getForObject(url,entity,MessageList.class);

但是我得到了一个编译错误

The method getForObject(String,Class<T>,Object...) in the type RestTemplate is not applicable for the arguments (String,HttpEntity<String>,Class<MessageList>)

我还尝试添加一个Jackson消息转换器

List<HttpMessageConverter<?>> messageConverters = new ArrayList<HttpMessageConverter<?>>(); //Add the Jackson Message converter messageConverters.add(new MappingJackson2HttpMessageConverter());//Add the message converters to the restTemplate restTemplate.setMessageConverters(messageConverters); MessageList messageList = restTemplate.getForObject(url,MessageList.class);

但是后来我得到了这个错误:

Exception in thread 'main' org.springframework.web.client.RestClientException: Could not extract response: no suitable HttpMessageConverter found for response type [class com.tdk.domain.backend.MessageList] and content type [text/html;charset=iso-8859-1] at org.springframework.web.client.HttpMessageConverterExtractor.extractData(HttpMessageConverterExtractor.java:109) at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:655) at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:613) at org.springframework.web.client.RestTemplate.getForObject(RestTemplate.java:287) at com.tdk.controllers.restful.client.RestTemplateExample.main(RestTemplateExample.java:51)

我也尝试添加课程

@Configuration@EnableWebMvcpublic class MvcConf extends WebMvcConfigurationSupport { protected void configureMessageConverters(List<HttpMessageConverter<?>> converters) {converters.add(converter());addDefaultHttpMessageConverters(converters); } @Bean MappingJackson2HttpMessageConverter converter() {MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();return converter; }}

但我得到了错误:

org.springframework.web.client.RestClientException: Could not extract response: no suitable HttpMessageConverter found for response type [class com.tdk.domain.backend.MessageList] and content type [text/html;charset=iso-8859-1] at org.springframework.web.client.HttpMessageConverterExtractor.extractData(HttpMessageConverterExtractor.java:109) at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:655) at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:613) at org.springframework.web.client.RestTemplate.getForObject(RestTemplate.java:287)

相关文章: