文章目录

  • 概述
  • 调用顺序
  • Feign构造多参数GET请求
    • url参数和方法参数一一对应
    • map接收
  • Feign构造多参数POST请求
  • 源码

概述

Spring Cloud-06服务消费者整合Feign中将消费者和Feign整合在了一起,示例中Feign客户端接口中的参数只有1个,如下

实际开发中,多个请求非常常见,如果请求参数有多个呢? 我们使用Feign该如何调用请求呢?


调用顺序

当浏览器或者外部其他请求请求到MovieController,MovieController需要调用UserController服务提供者提供的服务,MovieController会通过接口UserFeignClient来实现调用。 在UserFeignClient接口方法里,通过映射UserController的REST API实现调用对端服务。

服务端对外提供的rest风格的请求如下


Feign构造多参数GET请求

我们知道Spring Cloud为Feign添加了Spring MVC的注解支持,那按照Spring MVC那种写法试试?

MovieController中定义一个接受外部请求的方法,映射/movie/getA的请求

@RestController
@Slf4j
public class MovieController {@Autowiredprivate UserFeignClient userClient;@GetMapping("/movie/getA")public User findUser(User user) {log.info("get进入服务消费者 MovieController.findUser");return userClient.finUser(user);}
}

在Feign接口中,定义finUser方法,和服务端UserController暴露的url一致


@FeignClient("microservice-provider-user")
public interface UserFeignClient {@RequestMapping(method = RequestMethod.GET, value = "/get")public User finUser(User user);
}

可以看到 value = “/get” ,和服务提供者的请求url保持一致,这样就能可以调用到该服务。

那试下吧

  1. 启动microservice-discovery-eureka微服务,Eureka Server
  2. 启动micorservice-provider-user,服务提供者
  3. 启动micorservice-consumer-movie-fegin,服务消费者

访问 http://localhost:7901/movie/getA?username=%E5%B0%8F%E5%B7%A5%E5%8C%A0&age=10

传递了2个参数,都是User类的两个属性,按照Spring MVC的逻辑,肯定是可以自动转换的,但这里报错了

尽管我们指定了GET方法,Feign依然会使用POST方法发送请求。

那该如何写呢?

url参数和方法参数一一对应

URL有几个参数,Feign接口中的方法就有几个参数。使用@RequestParam注解指定请求的参数是什么

MovieController层

Feign接口

 /*** * @param username* @param age* @return* @desc get的url中有几个参数,Feign接口的方法中就定义几个参数,使用@RequestParam注解指定请求的参数是什么*         必须要加上@RequestParam注解,否则启动报错。*      */@RequestMapping(method = RequestMethod.GET, value = "/get")public User finUser(@RequestParam("username") String username ,@RequestParam("age") Integer age);

服务提供者保持不变。

  1. 启动microservice-discovery-eureka微服务,Eureka Server
  2. 启动micorservice-provider-user,服务提供者
  3. 启动micorservice-consumer-movie-fegin,服务消费者

访问 http://localhost:7901/movie/getB?username=%E5%B0%8F%E5%B7%A5%E5%8C%A0&age=10


map接收

多参数的URL也可使用Map来构建。当目标URL参数非常多的时候,可使用这种方式简化Feign接口的编写。

MovieController增加个新的方法便于测试

  @GetMapping("/movie/getC")public User findUser3(User user) {log.info("get2进入服务消费者 MovieController.findUser3");Map<String, Object> map = new HashMap<String, Object>() {{put("username",user.getUsername());put("age",user.getAge());}};return userClient.finUser(map);}

Feign接口

 /*** * @param map* @return* @desc 使用map来接收get请求的多个参数,@RequestParam不可少*/@RequestMapping(method = RequestMethod.GET, value = "/get")public User finUser(@RequestParam Map<String, Object> map);

服务提供者保持不变。

  1. 启动microservice-discovery-eureka微服务,Eureka Server
  2. 启动micorservice-provider-user,服务提供者
  3. 启动micorservice-consumer-movie-fegin,服务消费者

http://localhost:7901/movie/getC?username=%E5%B0%8F%E5%B7%A5%E5%8C%A0xxxx&age=9999


Feign构造多参数POST请求

如何使用Feign构造包含多个参数的POST请求 ?

假设服务提供者的Controller是这样编写的:

@RestController
public class UserController {@PostMapping("/post")public User post(@RequestBody User user) {...}
}

如何使用Feign去请求呢?

@FeignClient(name = "microservice-provider-user")
public interface UserFeignClient {@RequestMapping(value = "/post", method = RequestMethod.POST)public User post(@RequestBody User user);
}

用POSTMAN模拟下即可 ,注意Body是JSON格式

实际工作中的使用


源码

https://github.com/yangshangwei/SpringCloudMaster

Spring Cloud【Finchley】-07Feign构造多参数GET/POST请求相关推荐

  1. Spring Cloud Finchley OpenFeign的重试配置相关的坑

    如题,本文基于Spring Cloud Finchley.SR2 OpenFeign的重试 OpenFeign配置重试后,逻辑分析 对比Daltson和Finchley的基本组件,发现Ribbon还有 ...

  2. Spring Cloud Finchley版中Consul多实例注册的问题处理

    由于Spring Cloud对Etcd的支持一直没能从孵化器中出来,所以目前来说大多用户还在使用Eureka和Consul,之前又因为Eureka 2.0不在开源的消息,外加一些博眼球的标题党媒体使得 ...

  3. Spring Cloud 各组件调优参数

    Spring Cloud整合了各种组件,每个组件往往还有各种参数.本文来详细探讨Spring Cloud各组件的调优参数. Tomcat配置参数 1 server: 2 tomcat: 3 max-c ...

  4. Spring Cloud Finchley.SR1 的学习与应用 2 - Consul

    为什么80%的码农都做不了架构师?>>>    Spring Cloud Consul 简介 consul是google开源的一个使用go语言开发的服务发现.配置管理中心服务.内置了 ...

  5. Spring Cloud入门教程 - Zuul实现API网关和请求过滤

    简介 Zuul是Spring Cloud提供的api网关和过滤组件,它提供如下功能: 认证 过滤 压力测试 Canary测试 动态路由 服务迁移 负载均衡 安全 静态请求处理 动态流量管理 在本教程中 ...

  6. Spring Cloud Alibaba:Sentinel 热点参数限流

    文章目录 1. 前言 2. 热点规则配置 3. 参数例外项 1. 前言 Sentinel版本:1.8.0 何为热点?热点即经常访问的数据.很多时候我们希望统计某个热点数据中访问频次最高的 Top K ...

  7. Alibaba Sentinel对接Spring Cloud Gateway关于不显示API管理及请求链路的坑附带解决方案

    在调试Sentinel对接Scg网关的时候,出现了一个比较坑的现象,就是网关菜单,不显示请求链路和API管理的菜单项,这个问题主要是由于,Sentinel的dashboard前端sidebar.js的 ...

  8. 跟我学Spring Cloud(Finchley版)-10-Feign深入

    上一节( 跟我学Spring Cloud(Finchley版)-09-Feign )讲了Feign的入门姿势并深入对比了RestTemplate,本节来深入探讨Feign的高级特性.总的来说,Feig ...

  9. Spring Cloud【Finchley】实战-01注册中心及商品微服务

    文章目录 Spring Cloud[Finchley]专栏 概述 版本说明 搭建Eureka Server注册中心 工程结构 Step1. pom添加依赖 Step2.application.yml ...

最新文章

  1. python猜数游戏在程序中预设一个_一道Python简单程序结构练习题
  2. UVa12412 - A Typical Homework (a.k.a Shi Xiong Bang Bang Mang)
  3. Linux(Centos6.5)用户名密码
  4. PowerBI随笔(6)-filter、caculate、RELATED相关
  5. mysql之慢查询详解,mysqldumpslow的使用
  6. JavaScrit学习笔记(1)
  7. 文献记录(part15)--面向高维数据的聚类算法研究
  8. C++ reference很全面
  9. 如何把UIView转成UIImage,解决模糊失真问题
  10. 字符串拼接在Oracle和mysql中的用法
  11. 计算机科学研究课题申报书,教育科学研究课题立项申请书范文
  12. 微软更新Win10工具Media Creation Tool
  13. Interview Tips with Consulting Firms
  14. inter至强服务器处理器型号,Intel发布新处理器,用金/银作为型号区分
  15. ARM发布Cortex-X1,是为了向苹果自研A系列处理器发起冲击吗?
  16. docker swarm实践爆心肝总结全在这里,火速收藏!!!
  17. 奔赴山海之前,毕业季一定要做的那些事情
  18. fireworks html制作,教你用Fireworks制作简洁清爽的网站页面
  19. Android 适配暗黑模式
  20. 【图像处理】小波编码图像中伪影和纹理的检测(Matlab代码实现)

热门文章

  1. php1为true,php有一个预定义的常量true,值为整数1,这该如何理解?
  2. vue 登录模板_不用自己搭建后台模板,使用这个就够了
  3. 将单链表的每K个节点之间逆序
  4. Tableau实战系列数据连接及数据准备
  5. 深度学习核心技术精讲100篇(四十九)-深度学习之关联规则
  6. Flink从入门到精通100篇(一)-如何在Mac 上搭建 Flink环境并做简单测试
  7. 新手入门深度学习 | 3-1:数据管道Dataset
  8. Python入门100题 | 第045题
  9. Java面向对象part2
  10. numpy.floor详解