首页 > 其他分享 >22.OpenFeign调用第三方服务 (重要!)

22.OpenFeign调用第三方服务 (重要!)

时间:2022-09-23 17:01:21浏览次数:84  
标签:map 调用 22 OpenFeign Map 参数 put public

摘自 https://blog.csdn.net/qq_16549251/article/details/125453830

 

1.在pom.xml文件中添加OpenFeign的依赖.OpenFeign中集成了ribbion实现负载均衡

<!-- OpenFeign -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

 

2. SpringBoootApplication启动类上使用@EnableFeignClients标签来开启OpenFeign组件的使用

@SpringBootApplication
@EnableFeignClients //开启OpenFeign组件的使用
public class OrderServerApplication1020 {
public static void main(String[] args) {
SpringApplication.run(OrderServerApplication1020.class);
}
}

3.创建Feign接口(第三方服务的客户端),使用@FeignClient标签.其中value配置为第三方服务的服务名称,接口方法和服务端的接口方法完全保持一致,无论是参数还是返回值以及访问地址.

@FeignClient(value = "user-server")
public interface UserClient {
//Restful方式
//调用目标服务的controller的方法,和UseController中的方法路径保持一致
@GetMapping("/user/{id}")
User getById(@PathVariable Long id);
}

4.OpenFegin调用服务

4.1 第一种:无参,客户端和服务器端的方法保持一致即可

4.1.1 服务端 UserController:

//用户服务
@RestController
@Slf4j
public class UserController {
@GetMapping("/product/findAll")
public Map<String,Object> findAll(){
log.info("商品服务查询所有调用成功,当前服务端口:[{}]",port);
Map<String, Object> map = new HashMap<>();
map.put("msg","服务调用成功,服务提供端口为: "+port);
map.put("status",true);
return map;
}
}

4.1.2 客户端 UserClient接口 :

@FeignClient(value = "user-server")
public interface UserClient {
//第一种:无参
@GetMapping("/product/findAll")
public Map<String,Object> findAll();
}

4.1.3 调用端 OrderController:

//订单服务
@RestController
@Slf4j
public class OrderController {
@Autowired
private UserClient userClient;
//第一种:无参
@GetMapping("/feign/findAll")
public Map<String,Object> test2() {
log.info("进入测试feign调用的方法...");
Map<String, Object> map = userClient.findAll();
log.info("调用商品服务返回的信息:[{}]", map);
return map;
}
}

4.2 第二种:GET方式传参,参数需使用@RequestParam标签

4.2.1 服务端 UserController:

//Get传参测试
@GetMapping("/product/findOne")
public Map<String,Object> findOne(@RequestParam("productId") String productId) throws Exception {
log.info("商品服务,接收到的商品id为:[{}]",productId);
Map<String, Object> map = new HashMap<>();
//Thread.sleep(2000);
map.put("productdId",productId);
map.put("msg","根据商品id查询商品信息成功!");
map.put("status",true);
map.put("port", port);
return map;
}

4.2.2 客户端 UserClient接口 :

//根据商品id查询商品信息
@GetMapping("/product/findOne")
//注意使用openfeign 的GET方式传递参数 参数变量必须通过@RequestParam注解进行修饰
Map<String,Object> findOne(@RequestParam("productId") String productId);

4.2.3 调用端 OrderController:

//测试参数GET方式调用传参
@GetMapping("/feign/findOne")
public Map<String,Object> test3(String id ){
log.info("进入测试feign的GET方式传递参数...");
Map<String, Object> map = userClient.findOne(id);
log.info("调用商品服务返回的信息:[{}]",map);
return map;
}

4.3 第三种:POST方式传参,

4.3.1. 传递普通键值对参数,参数使用标签@RequestParam

4.3.1.1 服务端 UserController:

@PostMapping("/product/save")
public Map<String,Object> save(@RequestParam("name") String name){
log.info("商品服务,接收到的商品name为:[{}]",name);
Map<String, Object> map = new HashMap<>();
map.put("name",name);
map.put("msg","添加商品信息成功!");
map.put("status",true);
map.put("port", port);
return map;
}

4.3.1.2 客户端 UserClient接口 :

//注意使用openfeign 的Post方式传递参数 参数变量必须通过@RequestParam注解进行修饰
@PostMapping("/product/save")
Map<String,Object> save(@RequestParam("name") String name);

 

4.3.1.3 调用端 OrderController:

//1. 传递普通键值对参数
@GetMapping("/feign/save")
public Map<String,Object> test4(String name){
log.info("进入测试feign的Post方式传递参数...");
Map<String, Object> map = userClient.save(name);
log.info("调用商品服务返回的信息:[{}]",map);
return map;
}

4.3.2 传递对象类型参数,参数使用@RequestBody注解

4.3.2.1 服务端 UserController:

//使用openfeign的post方式传递对象信息
//要求服务提供方和服务调用方都是用@RequestBody 进行参数声明
//注意:服务提供方和调用方一定要加入@RequestBody注解
@PostMapping("/product/update")
//@RequestBody 将JSON格式对象转为对应的对象信息
public Map<String,Object> update(@RequestBody User user){
log.info("商品服务,接收到的商品name为:[{}]",user);
Map<String, Object> map = new HashMap<>();
map.put("product",user);
map.put("msg","添加商品信息成功!");
map.put("status",true);
map.put("port", port);
return map;
}

4.3.2.2 客户端 UserClient接口 :

@PostMapping("/product/update")
//2.传递对象类型参数
//使用openfeign的post方式传递对象信息
//要求服务提供方和服务调用方都是用@RequestBody 进行参数声明
//注意:服务提供方和调用方一定要加入@RequestBody注解
Map<String,Object> update(@RequestBody User user);

 

4.3.2.3 调用端 OrderController:

//2.传递对象类型参数
//测试参数post方式对象的参数传递
@GetMapping("/feign/update")
public Map<String,Object> test5(User user){
log.info("接收的商品信息:[{}]",user);
Map<String, Object> map = userClient.update(user);
log.info("调用商品服务返回的信息:[{}]",map);
return map;
}

 

4.总结:使用OpenFegin调用第三方服务时,客户端和服务端方法完全保持一致,无论是方法名称、方法参数、返回值以及请求路径,标签注解也须保持一致;

接口方法定义方式
资源Restful方式,参数需要使用@PathVariable注解;
使用GET方式:参数使用@RequestParam注解;
使用POST方式:
普通参数使用@RequestParam注解;
自定义对象参数使用@RequestBody注解,否则无法传递对象信息,传递过来的对象是无内容的,属性值都是NULL值
————————————————
版权声明:本文为CSDN博主「愤怒代码」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_16549251/article/details/125453830

 

标签:map,调用,22,OpenFeign,Map,参数,put,public
From: https://www.cnblogs.com/shaowangwu/p/16723319.html

相关文章

  • Feign调用第三方http接口 (摘抄)
    我们平常在开发的时候,经常会碰到调用第三方的接口,这个时候我们可以使用httpClient或者restTemplate,但是这两种方式相比较与Feign调用,都会麻烦一点儿。Feign是声明式服务调......
  • JavaWeb--MySQL约束、数据库设计、多表查询、事务--2022年9月22日
    第一节  约束1、概念A、约束是什么约束是作用于表中列上的规则,用于限制加入表的数据约束的存在保证了数据库中数据的正确性、......
  • 522 剩余系 欧拉定理 扩展欧拉定理
    视频链接:LuoguP5091【模板】扩展欧拉定理#include<iostream>usingnamespacestd;typedeflonglongLL;inta,b,m,phi,flag;chars[20000005];intget_phi(i......
  • 报告分享|2022汽车行业数字化转型白皮书
    全文链接:http://tecdat.cn/?p=28703受疫情影响,消费者购车行为偏好发生变化,以数字化、智能化手段洞察用户、进行精细化运营,以驱动汽车消费需求增长,成为车企迫在眉睫的诉求......
  • 报告分享|2022年区块链基础设施研究报告
    全文链接:http://tecdat.cn/?p=287011. 区块链基础设施是由具有广泛接入能力、公共服务能力、可灵活部署的公共链网,及连接这些区块链的跨链系统组成的网络服务设施。当前,......
  • 简单的继承练习——疑问:私有属性在类的方法内调用时,有必要使用get,set方法嘛?
    要求:创建一个Circle类,设置半径属性和返回面积的方法,在无参构造器中初始化半径值为1。创建一个Cylinder类,继承Circle类,设置属性高和返回体积的方法,在无参构造器中初始化......
  • 2022杭电多校9
    J.SumPlusProduct题意:给定一个长度为n的数组,每次随机拿出两个数使其变成(a+b+a*b)再放回数组,最终数组中只剩下一个数,求剩余数字的期望是多少。分析:模拟一下......
  • Pycharm2022.1.3安装教程(免费)
    pycharm的下载安装及使用以我的Pycharm2022.1.3为例首先去官网下载professtional(专业版)版本2022.1.3版本Pycharm软件https://www.jetbrains.com/pycharm/我们下载......
  • 2022.9.17:ICPC网络赛第一场
    突然意识到正式赛这个版块没有更新过什么,就打算写一个赛后总结开场跟榜开\(C\),跟队友讨论了好一会儿,\(20\)分钟才意识到和叶子结点有关,qgn上机,没看代码,觉得啥问题,结果......
  • bash中调用python、expect
    !usr/bin/bash指定解释器指定bash解释器(.sh)#!/usr/bin/bashping-c1www.qfedu.com&&echo"www.qfedu.comisup"||echo"www.qfedu.comisdown"指定py......