IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 项目中使用OpenFeign遇到的坑 -> 正文阅读

[Java知识库]项目中使用OpenFeign遇到的坑

1、Can not deserialize instance of java.util.ArrayList out of START_OBJECT token

错误原因:返回参数VO实现了Serializable没有加无参有参构造方法导致VO数据没法序列化,被请求通信模块也实体需要实现序列化接口

2、Feign调用其他模块接口时接口对应的参数必须添加@RequestParam注解,并根据需求添加required = false,参数可以为空。Feign请求通信时如果对方是post请求,则请求对象需要添加@RequestBody,如果是基本参数也需要添加@RequestParam注解,否则请求报错。

3、模块相互通信时双方必须启动,通信模块名对于注册在Nacos的实例名称

4、在接口加上@FeignClient注解时会把当前接口交由spring管理bean,每一个模块有且仅有一个其他模块的Feign

被Feign请求的接口

    @ApiOperation(value = "公告查询")
    @GetMapping("/list/announcement")
    public List<ContentVO> queryContent(@RequestParam (defaultValue = "1") Integer pageNo,
                                  @RequestParam(defaultValue = "6") Integer pageSize,
                                  @RequestParam(required = false) String announcementTitle) {
       return  super.copyPropertiesList(contentService.getAnnouncement(pageNo, pageSize, announcementTitle), ContentVO.class);
    }

小技巧:在创建Feign接口时直接复制要通信接口public上面的几行。

/**
 * 内容服务接口
 * Created by gmh on 2020/11/12
 * @author yangDongYong
 */
@FeignClient(value = ServiceNameConstants.SYSTEM_CONTENT, path = "/", fallbackFactory = ContentFeignFallback.class)
public interface ContentFeign {

 /**
     * 文章内容查询
     * @param pageNo 页
     * @param pageSize 每页size
     * @param announcementTitle 文章标题
     * @return 文章内容
     */
    @ApiOperation(value = "公告查询")
    @GetMapping("content/list/announcement")
    List<ContentVO> queryContent(@RequestParam(defaultValue = "1") Integer pageNo,
                                 @RequestParam(defaultValue = "6") Integer pageSize,
                                 @RequestParam(required = false)String announcementTitle);

}
降级工厂

/**
 * @Author fy
 * @create 2021/11/30 10:53
 */
@Slf4j
@Component
public class CustomerMemberFallback implements FallbackFactory<CustomerMemberFeign> {

    @Override
    public CustomerMemberFeign create(Throwable throwable) {

            @Override
            public Result<CtMmGroupVO> getVipInfoByPermission(String channelCode, String columnCode) {
                log.error("触发服务降级", throwable);
                return new Result<CtMmGroupVO>().error500("Fail");
            }
        };
    }
}
注解的使用说明
@FeignClient(value = ServiceNameConstants.SYSTEM_CONTENT, path = "/", fallbackFactory = ContentFeignFallback.class)

value 要通信的模块实例名称可以在nacos里面查看,直接copy过来即可

path 通信模块路径,也就是对应@RequestMapping("/content")的参数 ,可以不填,但是下面接口要填完整参数

fallbackFactory 自定义降级工厂的Class

使用:在要使用的类直接注入OpenFeign的bean即可

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-04-04 11:57:16  更:2022-04-04 12:01:35 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 7:15:02-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码