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

SpringCloud OpenFeign调用返回text/html接口无合适HttpMessageConverter报错如何解决

问题根因

报错的核心原因是Spring默认的MappingJackson2HttpMessageConverter仅支持application/json、application/*+json等JSON类媒体类型的响应解析,你调用的第三方接口返回的Content-Type: text/html不在该转换器的支持列表中,因此无法匹配到合适的转换器将响应反序列化为你定义的MyCustomRespone实体。
你引入的feign-jackson依赖本身是提供Feign的Jackson编解码能力,但它默认也只会处理JSON类型的响应,不会自动适配text/html类型,因此引入后问题仍然存在。

解决方案

推荐按优先级选择以下方案:

方案1:仅给指定Feign客户端配置自定义解码器(无全局侵入,最推荐)

你可以单独为目标Feign客户端自定义解码器,给Jackson转换器新增text/html类型支持,不会影响项目其他接口的解析逻辑:

  1. 自定义Feign配置类:
import feign.codec.Decoder;
import org.springframework.http.MediaType;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.cloud.openfeign.support.SpringDecoder;
import org.springframework.beans.factory.ObjectFactory;
import org.springframework.http.converter.HttpMessageConverters;
import java.util.List;

public class TextHtmlFeignConfig {
    @Bean
    public Decoder textHtmlFeignDecoder() {
        MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
        // 扩展支持text/html类型的响应解析
        converter.setSupportedMediaTypes(List.of(
                MediaType.APPLICATION_JSON,
                MediaType.TEXT_HTML
        ));
        ObjectFactory<HttpMessageConverters> objectFactory = () -> new HttpMessageConverters(converter);
        return new SpringDecoder(objectFactory);
    }
}
  1. 修改FeignClient注解,绑定自定义配置(注意修正你原代码中引号缺失的语法错误):
@FeignClient(name = "test", url = "/test", configuration = TextHtmlFeignConfig.class)
public interface MyFeignClient {
  @GetMapping("/hello")
  MyCustomRespone getValuesFromOtherService(@RequestParam String name, @RequestParam int id);
}

方案2:全局扩展消息转换器(适合项目内多个接口都返回text/html的场景)

如果你项目里有多个接口都返回text/html格式的JSON内容,可以直接全局扩展Spring MVC的消息转换器:

import org.springframework.context.annotation.Configuration;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.util.List;

@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
        converter.setSupportedMediaTypes(List.of(
                MediaType.APPLICATION_JSON,
                MediaType.TEXT_HTML
        ));
        converters.add(0, converter);
    }
}

兜底方案:手动解析响应

如果不想调整框架配置,可以把Feign接口返回值改为String,拿到响应字符串后手动用ObjectMapper转成实体:

@FeignClient(name = "test", url = "/test")
public interface MyFeignClient {
  @GetMapping("/hello")
  String getValuesFromOtherService(@RequestParam String name, @RequestParam int id);
}

调用处转换:

@Autowired
private ObjectMapper objectMapper;

public MyCustomRespone callService(String name, int id) throws JsonProcessingException {
    String resp = myFeignClient.getValuesFromOtherService(name, id);
    return objectMapper.readValue(resp, MyCustomRespone.class);
}

内容的提问来源于stack exchange,提问作者Liem

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 04:45:03