解决@RequestMapping和@FeignClient放在同一个接口上遇到的坑

目录
  • @RequestMapping和@FeignClient放同一个接口的坑
    • 原因
    • 解决方法
  • FeignClient上的RequestMapping不能生效
    • 问题
    • 原因
    • 解决过程
    • 结果

@RequestMapping和@FeignClient放同一个接口的坑

@RequestMapping("/user/admin")
@FeignClient(ServiceNameConstants.USER_ADMIN_SERVICE)
public interface IUserAdminAuthApi {
    ...
}

原因

在SpringCloudGateway中,当一个接口上同时拥有@RequestMapping和@FeignClient注解时, 请求会报异常

解决方法

把@RequestMapping放到方法上

FeignClient上的RequestMapping不能生效

问题

我有两个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")

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Spring cloud踩坑记录之使用feignclient远程调用服务404的方法

    前言 公司项目进行微服务改造,由之前的dubbo改用SpringCloud,微服务之间通过FeignClient进行调用,今天在测试的时候,eureka注册中心有相应的服务,但feignclient就是无法调通,一直报404错误,排查过程如下: 一.问题: 服务提供方定义的接口如下: /** * 黑白名单查询接口 * * @author LiJunJun * @since 2018/10/18 */ @Component(value = "blackAndWhiteListFeignClient

  • spring cloud Feign使用@RequestLine遇到的坑

    Feign使用@RequestLine遇到的坑 如何在微服务项目中调用其它项目的接口试使用spring cloud feign声明式调用. /** * 客户端请去 * @author RAY * */ @FeignClient(name="store",configuration=FooConfiguration .class) public interface UserFeignClient { @RequestLine("GET /simple/{id}") p

  • 详解spring cloud feign踩坑记录

    1:多客户端时,feign接口抽取到公共jar中,此时,客户端的启动类上需要对该jar中feign所在的包进行扫描,要在spring和feign中同时注册,否则启动时会报:"Consider defining a bean of type '******Feign' in your configuration." @SpringBootApplication @EnableTransactionManagement @EnableDiscoveryClient @ComponentSc

  • 自定义feignClient的常见坑及解决

    目录 自定义feignClient的常见坑 一.从eureka上拉取相关服务的配置信息 二.feignClient 发送请求到目标服务器 三.一些坑 四 .以下是现有全部的代码粘贴出来看一下 feignClient的使用 服务提供端代码 服务调用端 自定义feignClient的常见坑 自定义feignClient 踩过的坑,因为spring cloud 需要spring 4 以上的版本,所以对于低版本工程想要使用feign就需要自定义,在定义过程中遇到了很多问题,整理总结一下.(有需要的结合g

  • 解决@RequestMapping和@FeignClient放在同一个接口上遇到的坑

    目录 @RequestMapping和@FeignClient放同一个接口的坑 原因 解决方法 FeignClient上的RequestMapping不能生效 问题 原因 解决过程 结果 @RequestMapping和@FeignClient放同一个接口的坑 @RequestMapping("/user/admin") @FeignClient(ServiceNameConstants.USER_ADMIN_SERVICE) public interface IUserAdminAu

  • 详解vue中使用axios对同一个接口连续请求导致返回数据混乱的问题

    业务上出现一个问题:如果连续对同一个接口发出请求,参数不同,有时候先请求的比后请求的返回数据慢,导致数据顺序混乱,或者数据被覆盖的问题,所以需要控制请求的顺序. 解决方法: 1.直接跟后台沟通,将所有参数放到数组里后台统一接收并返回所有数据再由前端进行数据的拆分使用. 2.对于出现返回的数据混乱问题. 假设场景: 页面中需要对三个部门请求对应的部门人员,三个部门人员的数据为一个二维数组,连续发送请求,但由于返回数据的顺序不定,导致数组中的数据顺序不是按照部门的顺序. 解决方法:使用promise

  • 解决feign微服务间的文件上传报错问题

    A微服务调用B服务的上传文件接口报错: the request was rejected because no multipart boundary was found spring cloud版本 H <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>

  • 微服务之间如何通过feign调用接口上传文件

    具体需求: 我们的项目是基于springboot框架的springcloud微服务搭建的,后端服务技术层面整体上分为business服务和core服务,business服务用于作为应用层,直接连接客户端,通常用于聚合数据,core服务用来客户端具体操作不同需求来控制数据库,文件上传是通过客户端上传接口,通过business服务,由服务端调用feign接口,也是第一次做这种文件中转,遇到各种问题,下面是我自己的解决方案,不喜勿喷,代码小白一枚; 一.core服务层接口@requestmapping

  • 使用RestTemplate 调用远程接口上传文件方式

    目录 RestTemplate 调用远程接口上传文件 问题描述 解决方法 第一种方式 第二种方式 RestTemplate调用远程接口添加请求头 RestTemplate 调用远程接口上传文件 问题描述 第三方写了一个文件上传的接口,该接口的请求方式为Post请求,请求参数全部是以form-data表单形式进行提交,包含三个参数 第一个:cookie(字符串类型) 第二个:seqNo(字符串类型) 第三个:file(文件类型) 解决方法 使用传统的Spring Cloud的Feign组件在调用远

  • 解决bootstrap导航栏navbar在IE8上存在缺陷的方法

    在Bootstrap的官网上,提供了一种导航栏的组件: 只要在站点文件夹放好JQ与Bootstrap输入如下代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml

  • 详解使用php调用微信接口上传永久素材

    功能需求 公司新开的公众号需要将公司平台现在的所有精品文章都导入,手动导入会有很多的工作量,所以采用自动化同步文章的方式来达到效果 开发说明 微信open api提供了新增永久素材的接口,本次功能是基于这个接口进行数据同步的 使用到的接口 获取永久素材列表接口:material/batchget_material 新增永久素材接口:material/add_news 新增媒体文件接口:material/add_material 图文类型 单图文(要求有默认的封面,需要提前上传到微信公众号后台)

  • 解决angularjs前后端分离调用接口传递中文时中文乱码的问题

    1.首先前端需要进行字符串加密两次 encodeURIComponent(encodeURIComponent(param)); 2.这里是以java后台为例需要进行一次解码 URLDecoder.decode("接受到的String类型参数","UTF-8") 示例如下: @RequestMapping("looked_list") public Map lookedList(@RequestParam Map map) throws Unsu

  • 解决vue中使用Axios调用接口时出现的ie数据处理问题

    1.问题 近期在使用vue2 + axios 调用接口时碰到一个IE中很奇葩的问题,让我头痛了很久. 废话不多扯,就是在其他浏览器中调用接口返回数据然后可以很顺利的进行处理,但在IE(9-11)中发现发送请求是成功的而且也能抓到服务端返回来的数据.却发现在处理返回来的数据的时候处理的有点问题,怎么搞就是不行. 2.处理过程及方法 我使用了console大法去解决这个问题,具体是这样的:我先将服务器返回过来的数据打印到浏览器控制台,结果发现都能打印出来,这个时候就郁闷了,明明有数据为何在IE上还是

  • 解决.Net Core项目发布在IIS上访问404的问题

    对策: 1.进入线程池画面,将当前程序的线程池设为"无托管代码" 2.修改配置文件 Web.config,加上配置 原因: 因为.NetCore 5.0 自带集成了Swagger , 在发布项目时,通常会在代码中限制ASPNETCORE_ENVIRONMENT为Production时关闭Swagger. 解决方法:项目发布后默认为 Production 生产环境,可修改 web.config 文件,改成 Development 开发环境就可以访问. 具体方法如下:在web.config

随机推荐