Feign简介

Feign是一个声明式WebService客户端.使用Feign能让编写WebService客户端更加简单,它的使用方法是定义一个接口,然后在上面添加注解,同时也支持JAX-RS标准的注解.Feign也支持可拔插式的编码器和解码器.Spring Cloud对Feign进行了封装,使其支持了Spring MVC标准注解和HttpMessageConverters.Feign可以与Eureka和Ribbon组合使用以支持负载均衡.

Feign的使用

  1. 服务暴露api模块消费者模块的pom中均加入依赖
        <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-feign</artifactId></dependency>
  1. 在服务暴露api模块中创建Client接口类并声明注解@FeignClient(name = “XXXX”),
    接口类中的方法书写要注意:①@RequestMapping(“XXX/XXX”)代表要访问的服务的地址;②方法返回值类型一定要和客户端方法的返回值保持一致,例如客户端Controller的list方法返回值是ResultVO<jobInfoPO>,那么api方法的返回值也必须是ResultVO<jobInfoPO>(也可以只写ResultVO),否则会发生JSON无法反序列化问题(Error while extracting response for type [com.xmtx.XXXX] and content type [application/json].Can not deserialize instance of java.util.ArrayList out of START_OBJECT token)
  2. 在消费者模块的主启动类Application中声明@EnableFeignClients(basePackages = “com.XXXX”)
    注意:在多模块下一定要加上(basePackages = “com.XXXX”),否则会导致自动注入失败问题
  3. 多模块下需要把服务暴露api模块pom进消费者模块的依赖中。如3的注意事项:在多模块下@EnableFeignClients一定要加上(basePackages = “com.XXXX”),否则就是pom进来也会导致无法自动注入
  4. 在消费者端@Autowired自动注入暴露api接口类,调用类方法实现对服务的调用。

@Autowired自动注入失败问题

在自动注入Feign的客户端api接口类时,发现标红,显示

Could not autowire. No beans of 'XXXClient' type found.

网上查,很多答案说改IDE提示,但这种做法的前提是程序编译不要出错,但我此时编译却会出现以下问题:

Consider defining a bean of type 'com.XXX.XXXClient' in your configuration.

**说明这不是IDE提示问题,是真的就找不到该bean。。。**当时就纳闷了,明明在pom中把api模块加入依赖了,该client类也能import进来,怎么就找不到该bean,没法自动注入呢

TODO:在POM中加入模块依赖的作用,为啥不能自动注入???
TODO:@EnableFeignClients注解中basePackages = "com.XXXX"的作用

当时也没想feign注解问题(第一次搞。。),觉得是不是没扫描到,我就用@ComponentScan(basePackages=“com.XXXX”)去扫描,但没用,即使类的前缀包一样。。。。。
改basePackages="com.XXXX.XXXClient"该错误是没了,但又发现,扫描不到当前Controller类了。。。。
再改basePackages={“com.XXXX.XXXClient”,“com.XXX.XXXController”},还是没用,找不到client的bean。

最终,才终于发现应该在@EnableFeignClients上加上(basePackages = “com.XXXX”),其中"com.XXXX"是client类和当前类的共同前缀包。

feign下的JSON序列化和反序列化问题

feign是使用http进行传输的,而http传输需要进行序列化和反序列化,在feign的客户端和服务接口api之间传输时,一定注意方法返回值类型一定要和客户端方法的返回值保持一致。

例如:客户端Controller的list方法返回值是ResultVO<jobInfoPO>,那么api方法的返回值也必须是ResultVO<jobInfoPO>(也可以只写ResultVO),否则会发生JSON无法反序列化问题(Error while extracting response for type [com.xmtx.XXXX] and content type [application/json].Can not deserialize instance of java.util.ArrayList out of START_OBJECT token)

SpringCloud:多模块下Feign的使用,@Autowired注入问题以及JSON问题相关推荐

  1. 若依微服务版怎样在common-core模块下引用第三方lib的jar包(MobileIMSDK4J_tcp的jar包)

    场景 若依微服务版手把手教你本地搭建环境并运行前后端项目: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/109363303 在上 ...

  2. 若依微服务版怎样实现不同业务模块下实体和mapper互相调用

    场景 若依微服务版怎样新增业务子模块并使用代码生成实现对表的增删改查: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/109524 ...

  3. python高级语法-collections模块下几个新序列

    很多乃至绝大多数时候list,set,dict是不错的选择,但是有些特殊情形下我们发现内置的三种序列结构不能方便地满足我们的要求,这是collections模块下的几个新序列就有了用武之地. 这里只介 ...

  4. intellij idea 中去除 @Autowired 注入对象带来的红色下划线报错提示

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. PS: 有 2 种方法,第 2 种方法更简单,在此谢谢好心友人的评论. 方法1: idea中通过@A ...

  5. 【U8+】用友U8成本管理模块下,定额分配标准中无法取到新增存货的数据。

    [问题描述] 用友U8,新增存货后, 在[成本管理]模块下,操作[定额分配标准]取数后,无法取到新增存货数据. [解决方案] 由于没有过多的研究过用友U8的成本管理模块, 以下过程是在处理该问题时,整 ...

  6. pathlib.Path模块下的glob、rglob,glob模块下的glob、iglob

    1.导入所需模块 from pathlib2 import Path import glob2 as gb 2.当前所在路径 # D:\02周报 p = Path.cwd() 3.比较Path模块中的 ...

  7. python unittest 极简自动化测试框架:一、使用discover处理多模块下的多条用例的方法

    假如我们有这样一个工程,我们new一个新的project.在project中,创建一个用例模块case.而在我们实际工作项目中,功能模块不止是有一个(例如:我们真实的项目中有三个模块,baidu模块用 ...

  8. android ---- 多渠道、多模块下自动化发布maven

    最近重构项目,项目中有很多模块会提供给第三方使用.以前的做法是将所用模块打成一个本地aar 包给使用方使用.随着接入方的增加,就会有不同的需求,比如有些接入方只使用模块A,其他模块不再使用.于是在这次 ...

  9. security_huks模块下hks_rkc.c代码评注第一部分

    security_huks模块下hks_rkc.c代码评注第一部分 本篇综述 变量定义与初始化 密钥库文件属性初始化 初始化熵 填充密钥库文件缓冲区 填充哈希字段到缓冲区 填充根密钥数据到缓冲区 填充 ...

最新文章

  1. python 字符串按指定分隔符分割
  2. 设某一机器由n个部件组成_每日小课堂超级攻略!工业机器人知识点全知道
  3. 如何用Dart写一个单例
  4. sublime运行python代码python没显示_解决windows下Sublime Text 2 运行 PyQt 不显示的方法分享...
  5. 32 bit 与 64 bit 程序(2)比较
  6. uva 436 Arbitrage (II)
  7. Xshell连接linux(deepin)时提示ssh服务器拒绝了密码,请再试一次解决方法
  8. 安装logstash7.3.2遇到的坑及解决方案
  9. 分子生物学词汇(G~K)
  10. 全国哀悼日,英来网停站一天。
  11. SAP FICO 财务成本知识库
  12. linux的tar命令的exclude,mac 的tar命令--exclude和linux的tar命令--exclude的区别
  13. AS3中常用到的公式
  14. HTML5期末大作业:漫画网站设计——海贼王基地(5页) 学生动漫网页设计模板下载 海贼王大学生HTML网页制作作品 简单漫画网页设计成品 dreamweaver学生网站模板
  15. 2008年上半年中国移动通信增值市场特征
  16. 对回合制游戏的探讨以及想法
  17. 详解Pod和容器资源管理和分配(CPU和内存分配,临时存储管理)
  18. Android 集成google map,Markers ,定位,聚合
  19. 老虎证券web端PWA实践总结
  20. JavaScript基础三部曲(一):JavaScript简介及ECMAScript部分

热门文章

  1. iOS开发--UIWebView
  2. 想学IT的必看!如何化身BAT面试收割机?终局之战
  3. java 叫号_一种Java技术的智能叫号系统的制作方法
  4. 剑指offer的题目
  5. 推免生看过来,2020“推免服务系统”操作流程出来了!
  6. 屏幕适配全攻略(二)-- 解决方案
  7. 优品汇系统开发机制介绍
  8. 面试题 | 帽子问题
  9. android dialog去掉标题栏和边框
  10. 解决高度塌陷4种方法