在 Spring Cloud 项目中通过 Open Feign 远程调用时出现如下错误:
feign.codec.EncodeException: No qualifying bean of type 'org.springframework.boot.autoconfigure.http.HttpMessageConverters' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
...
Spring Cloud 版本:Hoxton.SR9
Spring Cloud Alibaba 版本:2.2.2.RELEASE
Spring Boot 版本:2.3.7.RELEASE
从报错信息中不难看出,错误原因是容器中缺少 HttpMessageConverters 这样一个 bean 对象。
GitHub 上 spring-cloud/spring-cloud-openfeign 与此相关的 issue:https://github.com/spring-cloud/spring-cloud-openfeign/issues/235。
在 spring-boot-autoconfigure 的较新版本中(具体哪个版本我也不知道),HttpMessageConverters 的自动配置条件更改了,可以参见 HttpMessageConvertersAutoConfiguration 类:
// 这里省去了其他无关注解
@ConditionalOnClass({HttpMessageConverter.class})
@Conditional({HttpMessageConvertersAutoConfiguration.NotReactiveWebApplicationCondition.class})
public class HttpMessageConvertersAutoConfiguration {}
因为现在的 Spring Cloud Gateway 是基于 WebFlux 的,是 Reactive Web。所以根据 @Conditional 的条件,HttpMessageConvertersAutoConfiguration 就不会生效,进而也不会进行自动配置,就导致容器中缺少 HttpMessageConverters 对象。

这个问题解决方法也很简单,只需自己写一个配置类,向容器中注册一个 HttpMessageConverters 对象即可。方法可以从 HttpMessageConvertersAutoConfiguration 中复制。参考如下:
@Configuration
public class FeignConfig {
@Bean
@ConditionalOnMissingBean
public HttpMessageConverters messageConverters(ObjectProvider<HttpMessageConverter<?>> converters) {
return new HttpMessageConverters(converters.orderedStream().collect(Collectors.toList()));
}
}
重启项目,问题解决。
目录SpringBootStarter是什么?以前传统的做法使用SpringBootStarter之后starter的理念:starter的实现: 创建SpringBootStarter步骤在idea新建一个starter项目、直接执行下一步即可生成项目。 在xml中加入如下配置文件:创建proterties类来保存配置信息创建业务类:创建AutoConfiguration测试如下:SpringBootStarter是什么? SpringBootStarter是在SpringBoot组件中被提出来的一种概念、简化了很多烦琐的配置、通过引入各种SpringBootStarter包可以快速搭建出一
Feign微服务调用传递文件以及MultipartFile多媒体参数对象上游服务提供者测试服务提供者下游消费者异常原因错误解决方案通过Feign调用接口,来到jdk动态代理的invoke方法,拿到分发器,执行invoke逻辑。invoke方法:构建ReuqestTemplate以及请求报文,执行并解密,执行请求拦截器。可行的解决方案寻找SpringEncoder来源注册自定义Encoder编写自定义Encoder自定义文件上传接口标识注解编写encode逻辑测试总结上游服务提供者使用spring接收文件可以使用MultipartFile对象,并同时使用RequestPart注解标识这个一个多媒
📝学技术、更要掌握学习的方法,一起学习,让进步发生👩🏻作者:一只IT攻城狮。💐学习建议:1、养成习惯,学习java的任何一个技术,都可以先去官网先看看,更准确、更专业。💐学习建议:2、然后记住每个技术最关键的特性(通常一句话或者几个字),从主线入手,由浅入深学习。❤️《SpringCloud入门实战系列》解锁SpringCloud主流组件入门应用及关键特性。带你了解SpringCloud主流组件,是如何一战解决微服务诸多难题的。项目demo:源码地址👉🏻SpringCloud入门实战系列不迷路👈🏻:SpringCloud入门实战(一)什么是SpringCloud?SpringCloud入门实战
SpringCloudAlibaba全集文章目录:零、手把手教你搭建SpringCloudAlibaba项目一、手把手教你搭建SpringCloudAlibaba之生产者与消费者二、手把手教你搭建SpringCloudAlibaba之Nacos服务注册中心三、手把手教你搭建SpringCloudAlibaba之Nacos服务配置中心四、手把手教你搭建SpringCloudAlibaba之Nacos服务集群配置五、手把手教你搭建SpringCloudAlibaba之Nacos服务持久化配置六、手把手教你搭建SpringCloudAlibaba之Sentinel实现流量实时监控七、手把手教你搭
概述最近在想做个cloud项目,gitee上找了个模板项目,后端使用到Nacos、Gateway、Security等技术,需要到Docker容器部署,在此总结一下,若有不足之处,望大佬们可以指出。什么是DockerDocker使用Google公司推出的Go语言进行开发实现,基于Linux内核的cgroup,namespace,以及AUFS类的UnionFS等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。Docker在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护。使得Do
Feign简介Feign是声明式的http客户端,官网地址:[https://github.com/openfeign/feign]其作用就是帮助我们优雅的实现http请求的发送。它让微服务的调用变得更简单了,类似Controller调用service。SpringCloud集成了Ribbon和Eureka,可在使用Feign时提供负载均衡的http客户端。只需要创建一个接口,然后添加注解即可!RestTemplate的缺点微服务远程调用方式还有通过RestTemplate,但是RestTemplate存在一定的缺点比如参数很多的情况下那么他的http地址将会难以维护。相信我用过Feign之后
我正在尝试使用Python中的生物格式来读取显微镜图像(.lsm、.czi、.lif,随便你怎么说),打印出元数据,然后显示图像。ome=bf.OMEXML(md)给我一个错误(如下)。我认为它是在谈论存储在md中的信息。它不喜欢md中的信息不全是ASCII。但是我该如何克服这个问题呢?这是我写的:importTkinterasTk,tkFileDialogimportosimportjavabridgeasjvimportbioformatsasbfimportmatplotlib.pyplotaspltimportnumpyasnpjv.start_vm(class_path=bf
我正在使用hfcca计算C++代码的圈复杂度。hfcca是一个简单的python脚本(https://code.google.com/p/headerfile-free-cyclomatic-complexity-analyzer/)。当我尝试运行脚本以生成xml文件形式的输出时,出现以下错误:Traceback(mostrecentcalllast):"./hfcca.py",line802,inmain(sys.argv[1:])File"./hfcca.py",line798,inmainprint(xml_output([fforfinr],options))File"./hf
Python在使用wolframalphaapi时抛出这个:Traceback(mostrecentcalllast):File"c:\Python27\lib\threading.py",line530,in__bootstrap_innerself.run()File"c:\Python27\lib\site-packages\Skype4Py\utils.py",line225,inrunhandler(*self.args,**self.kwargs)File"s.py",line38,inOnMessageStatusifbody[0:5]=='!math':wolfram(
当我尝试安装StringGenerator时使用pip,系统提示我出现此错误:C:\Users\Administrator>pipinstallStringGeneratorCollectingStringGeneratorUsingcachedStringGenerator-0.3.0.tar.gzCompleteoutputfromcommandpythonsetup.pyegg_info:Traceback(mostrecentcalllast):File"",line1,inFile"C:\Users\ADMINI~1\AppData\Local\Temp\2\pip-buil