Fegin 错误 Could not extract response: no suitable HttpMessageConverter found for XXX

当使用Fegin调用下载接口时遇到`DecodeException`,原因是接口返回`application/octet-stream;charset=UTF-8`类型的数据,而期望的类型是JSON。解决方法是将返回值替换为Fegin的`Response`,并直接处理`Response`中的`InputStream`来获取流数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题:

这两天用Fegin 调用其他小组的下载接口报错
feign.codec.DecodeException: Could not extract response: no suitable HttpMessageConverter found for response type [class com.XXX…manager.dto.HaloResponse] and content type [application/octet-stream;charset=UTF-8]

原因:

对方返回的结果用postman调用显示是流的形式,接收的字段HaloResponse 是json格式
在这里插入图片描述

解决方法:

将返回值用Fegin 自带的Response 替换之前HaloResponse
看一下Response的源码

  private final int status;
  private final String reason;
  private final Map<String, Collection<String>> headers;
  private final Body body;
  private final Request request;

body源码

public interface Body extends Closeable {

    /**
     * length in bytes, if known. Null if unknown or greater than {@link Integer#MAX_VALUE}.
当我们使用Spring RestTemplate进行HTTP请求时,有时会遇到"Could not extract response: no suitable HttpMessageConverter found for content type [xxx]"的错误。这是因为RestTemplate默认使用的HttpMessageConverter无法处理返回的数据类型。解决这个问题的方法是添加一个能够处理该数据类型的HttpMessageConverter。 以下是两种解决方法: 1.使用MappingJackson2HttpMessageConverter ```java RestTemplate restTemplate = new RestTemplate(); MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(); converter.setSupportedMediaTypes(Collections.singletonList(MediaType.valueOf("application/vnd.github.v3+json"))); restTemplate.getMessageConverters().add(converter); ``` 2.自定义HttpMessageConverter ```java public class MyHttpMessageConverter extends AbstractHttpMessageConverter<Object> { public MyHttpMessageConverter() { super(MediaType.valueOf("application/vnd.github.v3+json")); } @Override protected boolean supports(Class<?> clazz) { return true; } @Override protected Object readInternal(Class<?> clazz, HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException { // 处理返回的数据 return null; } @Override protected void writeInternal(Object o, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException { // 处理发送的数据 } } ``` 然后将自定义的HttpMessageConverter添加到RestTemplate中: ```java RestTemplate restTemplate = new RestTemplate(); restTemplate.getMessageConverters().add(new MyHttpMessageConverter()); ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大鹏小站

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值