问题

我有两个FeignClient共同继承了一个接口,两个Client有各自不同的url实现,其中一个需要加上类似于@RequestMapping作用在类上的效果,因为@RequestMapping在FeignClient中作用在方法上是有效的,如果和@Controller一样放在类上是不是能实现呢,试了一下发现@RequestMapping与@FeignClient共同作用在一个类上时并不会生效。

原因

通过源码可得FeignClient注入时通过FeignClientFactoryBean进行Bean的初始化,在其中并没有对RequestMapping进行处理。

解决过程

小知识1:FeignClient是一个通过HTTP协议进行请求的RPC框架,而且是使用的RestTemplate进行封装的,那么其中肯定有对url的封装。我只需要找到在封装url时看看能不能加上一段地址就好。

小知识2:在依赖注入时SpringFactory会通过doGetBean()方法去找到对应的Bean信息, 如果该Instance是一个BeanFactory那么会通过Beanfactory.getObject()来获取对象。那么我只需要进入到FeignClienFactoryBean中查看对应的方法就好了。

那么在源码中找到了对应的处理代码如下:

this.url = this.url + this.cleanPath();

private String cleanPath() {
String path = this.path.trim();
if (StringUtils.hasLength(path)) {
if (!path.startsWith("/")) {
path = "/" + path;
}
if (path.endsWith("/")) {
path = path.substring(0, path.length() - 1);
}
}
return path;
}

在上述代码中可以发现可以通过设置path属性来达到我要的效果。

结果

通过设置@FeignClient中的path属性可以达到效果,通过源码中的 @FeignClient(name="serviceName", url = "http://localhost:8080", path="value")

最新文章

  1. C语言 结构体指针赋值 incompatible types when assigning to type 'char[20]' from type 'char *'
  2. Unity3D将来时:WebGL
  3. poj 2385Apple Catching(简单dp)
  4. mysql注入研究
  5. 2014年黑金FPGA原创教程规划发布
  6. makefile中的伪目标
  7. UISegmentedControl(转)
  8. JAVA学习随笔-.class
  9. IOS的一些尺寸
  10. python学习之“切片操作从入门到精通”
  11. C#中的Attribute和Java中的Annotation
  12. log4j学习日记-写入数据库
  13. hdu 1317 XYZZY
  14. 让MFC程序隐藏运行界面
  15. Eval()、XPath() 和 Bind() 这类数据绑定方法只能在数据绑定控件的上下文中使用
  16. 【垃圾回收】Java内存回收实践经验 防止内存报警
  17. Logistic Regression 算法向量化实现及心得
  18. java获取ip的方式,注意多级代理的方式获取
  19. Python零散函数
  20. React(六)Props属性

热门文章

  1. jdk、jre环境变量配置
  2. Kotlin高阶函数实战
  3. MapReduce框架原理-OutputFormat工作原理
  4. MySQL Utilities工具教程
  5. 【死磕 Java 基础】 — 谈谈那个写时拷贝技术(copy-on-write)
  6. DDD领域驱动理解
  7. spring-data-jdbc的基础使用(一)
  8. Java Lambda 表达式源码分析
  9. 【力扣leetcode】-787. K站中转内最便宜的航班
  10. 查询liunx上磁盘占用情况