Spring Cloud Feign API接口位置的问题

SpringCloud服务之间的调用都是通过Feign 完成、怎么用,网上一大把教程。导入依赖,启动类添加注解。新增Client类并把@FeignClient注上去。那么问题来了,这个类应该放哪里。假如现在有B,A服务。B需要调用A。我的做法是将要生成的AClient类放置在A工程。

 

AccApi:

AcctClient:

例如这样。但启动项目会报错:Caused by: java.lang.IllegalStateException: Ambiguous mapping. Cannot map 'com.jjm.acct.AcctClient' method 

原因很简单,注入了两个一样的Bean。因为AcctApi有两个实现、AcctClient和实际的业务控制层。

解决方法:

在AcctApi加@RequestMapping区分开业务控制层

value里的值唯一就行。然后启动A服务。正常,启动B服务,调用也正常。但我预想的是B调用应该会路径错误,调用失败。因为同样的注解。子类的优先级会更高,然后再网上搜了半天没有什么结果。只好自己调试Feign源码看是怎么拼接路径。发现Feign是在BaseContract.parseAndValidateMetadata方法去解析注解。并且解析的父接口。一下明白了、弄了半天。值了

此文仅在记录。可能有更好的解决方案。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值