resttemplate无法接收[text/json;charset=UTF-8]
报错信息:
org.springframework.web.client.UnknownContentTypeException: Could not extract response: no suitable HttpMessageConverter found for response type [class java.lang.Object] and content type [text/json;charset=UTF-8]
开发中碰到的,给下游提供的接口传数据,刚开始用HashMap接接不到,换成Object还是接不到,那肯定是下游返回值有点问题了,下游是.net写的老项目,猜测很多地方和java有区别吧。
- 这里直接说结论:
[text/json;charset=UTF-8]这个content-type,Resttemplate自带的转换器翻译不了,所以报了如上错误,解决方案是给RestTmplate添加相应的转换器。
- 步骤如下
- 定义一个转换器类
public class TemplateMappingJackson2HttpMessageConverter extends MappingJackson2HttpMessageConverter {
public TemplateMappingJackson2HttpMessageConverter(){
List<MediaType> mediaTypes = new ArrayList<>();
mediaTypes.add(MediaType.valueOf("text/json;charset=UTF-8"));
setSupportedMediaTypes(mediaTypes);
}
}
- 这里分两种情况,如果项目没有对restTemplate进行统一配置,直接new出来的时候把这个转换器加进去就好了。代码:
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(new TemplateMappingJackson2HttpMessageConverter());
- 如果是公司的项目的话,那大概率会对resttemplate进行统一配置,以bean的形式注入到Spring容器里,这个配置类要自己去找,类名可能是像RestTemplateConfig这种的,找到以后在相应的地方把这个转换器加进去就好了。
restTemplate.getMessageConverters().add(new TemplateMappingJackson2HttpMessageConverter());
重启项目,问题解决。