前言:
  • 在SpringCloud中我们调用服务时往往会使用Feign客户端替代RestTemplate手动调用,我们只需要定义接口,接口上使用@FeignClient(“服务名”)注解即可,Feign会帮我们生成动态代理(使用JDK 的动态代理),生成的代理类,会将请求的信息封装,交给 feignClient 接口发送请求。
1.Feign不支持GET方法传递POJO
  • 由于springMVC是支持GET方法直接绑定POJO的,只是feign实现并未覆盖所有springMVC特效,网上的很多变通方法都不是很好,要么是吧POJO拆散成一个一个单独的属性放在方法参数里,要么是把方法参数变成Map,要么就是要违反HTTP协议,GET传递@RequestBody:

spring MVC 不支持继承接口中方法参数上的注解(支持继承类、方法上的注解),所以使用Feign调用接口时无法直接传递Pojo

解决方式1
  • 传递Map<Stiring,Object>参数。使用Map<String,Object>将参数封装,然后在接口方法参数中直接传递Map,并使用@RequestParma 注解。
    这种方式已经是最接近Pojo方式了,有一个小问题,就是多个name相同时,使用String[]数组装name的多个value值,Feign无法正常绑定参数。
/*** @author wx* 调用订单服务*/
@FeignClient("PAY-ORDER")   //服务名
public interface OrderService {/*** 商户支付订单列表查询* @return*/@GetMapping("/order/list")ReturnData<OrderDto> merchPayOrderList(@RequestParam Map<String,Object> map);
}
解决方式2
  • 使用feign拦截器 https://www.jianshu.com/p/085c11e5722f
2. Feign调用get请求接口传递多个参数 @RequestParma(“参数名”)

注意: 使用@RequestParam注解时必须要在后面加上参数名,与前台传来的name一致。
缺点:此种方式若参数过多,会非常繁琐,代码可读性差。

@FeignClient("PAY-ORDER")   //服务名
public interface OrderService {/*** 商户支付订单列表查询* @return*/@GetMapping("/order/list")ReturnData<OrderDto> merchPayOrderList(@RequestParma("currPage") String currPage, @RequestParam(pageSize) String pageSize);
}注意:@RequestParma("currPage") 中的currPage是外部识别的参数名     String currPage是用来接收值的
3. Feign调用get请求接口传递单个参数 @PathVariable

使用@PathVariable可以用来映射URL中的占位符到目标方法的参数中

@FeignClient("PAY-ORDER")   //服务名
public interface OrderService {/*** 商户支付订单列表查询* @return*/@GetMapping("/order/list/{id}")ReturnData<OrderDto> merchPayOrderList(@PathVariable("id") Integer id);
}
4. Feign调用Post请求接口传递对象(Pojo) @RequestBody

@RequestBody表示接收一个请求参数 content-type类型为application/json 的参数,表示请求内容的类型为 json

@FeignClient("PAY-ORDER")   //服务名
public interface OrderService {/*** 商户支付订单列表查询* @return*/@PostMapping("/order/list")ReturnData<OrderDto> merchPayOrderList(@RequestBody User user);   //使用@RqeuestBody注解,传入一个User对象
}注意:提供者的接口参数也应该使用@RequestBody注解

其他参考链接:
https://www.jianshu.com/p/7ce46c0ebe9d
http://www.itmuch.com/spring-cloud-sum/feign-multiple-params/ 如何使用Feign构造多参数的请求

SpringCloud Feign参数传递问题相关推荐

  1. SpringCloud Feign声明式服务调用

    SpringCloud Feign声明式服务调用 1. 加入pom依赖 2. Application.java上声明@EnableFeignClients 3. @FeignClient声明接口调用服 ...

  2. SpringCloud feign 的三种超时时间配置

    1.负载均衡 Feign调用服务的默认时长是1秒钟,也就是如果超过1秒没连接上或者超过1秒没响应,就会相应的报错.Feign 的负载均衡底层用的是 Ribbon,其配置如下: ribbon:ReadT ...

  3. springcloud Feign断路器实战和问题总结

    springcloud Feign断路器实战和问题总结 断路由是防止该服务调用其他外服务时,外服务宕机或者出差时,影响到本服务的宕机,引起大面积的瘫痪,所以才有了断路由的由来. springcloud ...

  4. SpringCloud Feign 传参问题及传输Date类型参数的时差

    1.多参数表单类型传输 @PostMapping("/service/system/advertiser/save")Response<Boolean> saveAdv ...

  5. Feign、OpenFeign及SpringCloud Feign的区别

    Feign.OpenFeign及SpringCloud Feign的区别 1. 三者概念 2. 依赖配置 1. 三者概念 Feign是Spring Cloud组件中一个轻量级RESTful的HTTP服 ...

  6. springcloud feign 服务调用其他服务_微服务实战——SpringCloud与Feign集成

    上一篇集成了ZuulGateway和Eureka并进行了测试.在实际场景中,我们肯定会有很多的微服务,而他们之间可能会存在相互调用的关系,那么,如何优雅的处理服务之间的调用问题呢?接下来就是我们要解决 ...

  7. SpringCloud Feign实战(二)

    一,新建Feign工程microservicecloud-consumer-dept-feign,拷贝microservicecloud-consumer-dept-80这个工程的配置和程序 二,修改 ...

  8. SpringCloud Feign重试详解

    摘要: 今天在生产环境发生了数据库进程卡死的现象,除了sql因为全量更新,没加索引的原因,最主要还是我们的接口的服务器端接口出现问题了.忽视了更新接口的幂等性,以及调用方feign client的重试 ...

  9. SpringCloud Feign 源码底层如何调用Ribbon实现服务调用的负载均衡

    在SpringCloud微服务中调用都不是直接用Ribbon进行服务调用,因为那样的化项目中的代码量会增加很多,微服务之间的调用是用Feign来进行调用,下面就是普通的一个接口调用例子 这样就可以进行 ...

最新文章

  1. 【Sql Server】DateBase-事务
  2. JVM插码之五:Java agent+ASM实战--监控所有方法执行时间
  3. oracle数据库导入导出expdp/impdp命令详细操作过程
  4. Attachment rename issue in Faas
  5. 内含干货PPT下载|一站式数据管理DMS及最新解决方案发布
  6. 苹果电池健康几天掉1点
  7. python文本文件合并,python将多个文本文件合并为一个文本的代码(便于搜索)
  8. 网易Python爬虫:爬取网易科技频道文章存入MySQL数据库
  9. Windows10下自定义桌面快捷方式图标--以Spyder为例
  10. 【实习日报】2019年5月 前端开发实习工作日报汇总
  11. chrome浏览器扩展打包成crx
  12. Dogfight :从无人机视频中检测无人机
  13. css控制文本超出省略(单行、两行、多行)
  14. 编程帮助小明计算地铁票价(C++)
  15. 随机生成11位的电话号码
  16. python json接口数据提取_返回数据中提取数据的方法(JSON数据取其中某一个值的方法)...
  17. 这届年轻人,是最孤独的一代吗?
  18. 人生必看的一百部电影
  19. python numpy中fromfile函数的使用
  20. 老周语录-做出好产品的关键

热门文章

  1. 机器人学习--ROS学习入门
  2. 大学生创新创业大赛应该如何入手?互联网+ 三创赛 挑战杯 有现成模板
  3. 操作系统中的页表的结构
  4. 创业公司失去了增长,你啥也不是!|【常垒·常识】
  5. 【区块链】关于访问控制的一些思考
  6. 2023软考信息系统项目管理师论文写作
  7. sup 元素的使用
  8. SERVER SQL CASE
  9. 分子对接教程 | (6) AutoDock对接操作与对接结果解读
  10. Chrome的版本和Selenium支持的版本不一致