项目中使用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即可

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值