You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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,证实这一点。

解决思路

  1. 修改WireMock配置:在stub定义中明确设置响应的Content-Type为application/json:
{
  "response": {
    "headers": {
      "Content-Type": "application/json"
    },
    "body": "{...你的JSON响应内容...}"
  }
}
  1. 扩展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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 08:43:16