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即可
|