Spring MVC用RestTemplate遇HttpMessageConverter缺失错误,SpringBoot正常
问题解决:Spring MVC中RestTemplate报错"Could not extract response: no suitable HttpMessageConverter found"
原因分析
Spring Boot会通过自动配置(如RestTemplateAutoConfiguration)为RestTemplate默认添加Jackson JSON消息转换器,而纯Spring MVC环境下手动new RestTemplate()时,默认的转换器列表中可能缺少处理application/json类型的MappingJackson2HttpMessageConverter,导致无法解析接口返回的JSON响应。
解决方案
1. 确保依赖完整
首先确认项目中已引入Jackson相关依赖(Maven示例):
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>你的版本号</version> </dependency>
若Spring MVC项目的spring-web依赖未间接引入该包,需手动添加。
2. 手动配置RestTemplate的JSON转换器
不要直接使用new RestTemplate()的实例,手动添加JSON转换器:
方式一:直接实例化时配置
RestTemplate restTemplate = new RestTemplate(); MappingJackson2HttpMessageConverter jsonConverter = new MappingJackson2HttpMessageConverter(); // 明确设置支持application/json类型 jsonConverter.setSupportedMediaTypes(Collections.singletonList(MediaType.APPLICATION_JSON)); restTemplate.getMessageConverters().add(jsonConverter); Courses courses = restTemplate.getForObject("http://localhost:8090/apple/courses", Courses.class);
方式二:通过配置类注册RestTemplate(推荐)
在Spring MVC配置类中定义统一配置的RestTemplate Bean:
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.MediaType; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; import org.springframework.web.client.RestTemplate; import java.util.Arrays; @Configuration public class RestTemplateConfig { @Bean public RestTemplate restTemplate() { RestTemplate restTemplate = new RestTemplate(); MappingJackson2HttpMessageConverter jsonConverter = new MappingJackson2HttpMessageConverter(); jsonConverter.setSupportedMediaTypes(Arrays.asList( MediaType.APPLICATION_JSON, MediaType.APPLICATION_JSON_UTF8 // 兼容旧版UTF-8编码的JSON响应 )); restTemplate.getMessageConverters().add(jsonConverter); return restTemplate; } }
后续在控制器中通过@Autowired注入RestTemplate即可使用。
3. 额外确认(可选)
虽然Spring Boot中正常运行说明实体类无问题,仍可快速检查Courses类:
- 有无无参构造函数
- 字段是否有对应的getter/setter方法
- 字段名与JSON键名不一致时,是否添加了
@JsonProperty注解
内容的提问来源于stack exchange,提问作者Kirtiman Bhagawati
相关产品推荐
相关产品推荐

