Spring Feign请求报错:找不到合适的HttpMessageConverter原因咨询
问题原因及分析
这个报错的核心原因是WireMock返回的响应Content-Type头为application/octet-stream,而非Feign默认JSON转换器支持的application/json。
具体细节:
- 你通过Postman看到的是有效JSON,但Postman会自动识别响应内容格式,不会严格校验Content-Type头,所以没发现WireMock实际返回的是二进制流类型的Content-Type。
- Feign默认使用的
MappingJackson2HttpMessageConverter仅处理application/json、application/*+json这类标识为JSON的响应头,当响应头是application/octet-stream时,它不会尝试将内容解析为JSON对象。 - 你Feign接口上的
consumes = MediaType.APPLICATION_JSON_VALUE是用来定义请求发送的Content-Type,和响应的Content-Type无关,无法触发JSON转换器处理响应。
验证方法
用curl请求接口查看响应头,确认Content-Type:
curl -v ${base.url}/api/v1/failed
输出中会显示Content-Type: application/octet-stream,证实这一点。
解决思路
- 修改WireMock配置:在stub定义中明确设置响应的Content-Type为
application/json:
{ "response": { "headers": { "Content-Type": "application/json" }, "body": "{...你的JSON响应内容...}" } }
- 扩展Feign的消息转换器:在
FeignClientConfig中添加支持application/octet-stream的JSON转换器,让Feign把该类型的响应当作JSON解析:
@Configuration public class FeignClientConfig { @Bean public MappingJackson2HttpMessageConverter octetStreamJsonConverter() { MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(); converter.getSupportedMediaTypes().add(MediaType.APPLICATION_OCTET_STREAM); return converter; } }
内容的提问来源于stack exchange,提问作者user1555190
相关产品推荐
相关产品推荐

