当前位置: 首页 > news >正文

FeignClient接口的几种方式总结

 @FeignClient这个注解,已经封装了远程调用协议。在springboot的开发,或者微服务的开发过程中,我们需要跨服务调用,或者调用外部的接口,我们都可以使用FeignClient。

 

一、@FeignClient介绍

@FeignClient 注解是 Spring Cloud 中的一个组件,它是基于 Netflix Feign 实现的。@FeignClient 注解可以帮助我们定义和实现服务之间的 RESTful 接口,使得服务之间的调用更加方便和可靠。@FeignClient 注解可以用于客户端的 API 接口定义,它可以将一个 HTTP API 接口转化为一个 Java 接口,从而使得我们可以像调用本地方法一样调用远程服务。

注解源码与解析
 

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface FeignClient {@AliasFor("name")String value() default "";String contextId() default "";@AliasFor("value")String name() default "";@DeprecatedString qualifier() default "";String[] qualifiers() default {};String url() default "";boolean decode404() default false;Class<?>[] configuration() default {};Class<?> fallback() default void.class;Class<?> fallbackFactory() default void.class;String path() default "";boolean primary() default true;}

1.1 value属性
具有可选协议前缀的服务的名称。名称的同义词。无论是否提供url,都必须为所有客户端指定名称。可以指定为属性键,例如:${propertyKey}。

1.2 contextId属性
这将被用作bean名称,而不是名称(如果存在),但不会用作服务id。

1.3 name属性
和value作用相同

1.4 qualifier属性
已弃用qualifier()。如果qualifier()和 qualifiers() 都存在,我们将使用后者,除非 qualifiers() 返回的数组为空或仅包含null或空白值,在这种情况下,我们将首先返回qualifier() ,如果也不存在,则返回默认值=contextId+“FeignClient”。

1.5 qualifiers属性
如上,已说明

1.6 url属性
绝对URL或可解析的主机名(协议是可选的)

1.7 decode404属性
404是否应该解码而不是抛出虚假异常

1.8 configuration属性
用于外部客户端的自定义配置类。可以包含组成客户端的部分的覆盖@Bean定义,例如feign.codec.Decoder, feign.codec.Encoder, feign.Contract.

1.9 fallback属性
指定的外部客户端接口的回退类。回退类必须实现由该注释注释的接口,并且是有效的spring bean。

1.10 fallbackFactory属性
为指定的外部客户端接口定义回退工厂。回退工厂必须生成回退类的实例,这些实例实现由FeignClient注释的接口。回退工厂必须是有效的spring bean。

1.11 path属性
所有方法级映射使用的路径前缀。

1.12 primary属性
是否将外部代理标记为主bean。默认为true。

二、常见的FeignClient接口的几种方式总结

@FeignClient(name = "myhuaweicloud", url = "https://xxx.com/")
public interface HuaweicloudClient {/*** 获取access-token接口*/@PostMapping("v1/xxx/enterprises/access-token")public Map<String,Object>  getAccessToken(@RequestBody Map<String, Object> params);/*** 获取实况地址统一接口*/@PostMapping("/v2/xxx/devices/channels/media/live-connections")public Map<String, Object> liveConnections(@RequestHeader(name = "Access-Token",required = true) String Token,@RequestBody Map<String, Object> params);/*** 获取通道列表* @param map* @return*/@GetMapping("/v1/xxx/channels")public Map<String, Object> channels( @RequestHeader(name = "Access-Token",required = true) String Token,@RequestParam("device_id")String deviceId,@RequestParam("offset") Integer offset,@RequestParam("limit")Integer limit );/*** 获取设备列表* @param map* @return*/@GetMapping("/v1/xxx/devices")public Map<String, Object> devices( @RequestHeader(name = "Access-Token",required = true) String Token,@RequestParam("device_name") String deviceName,@RequestParam("offset") Integer offset,@RequestParam("limit")Integer limit);}

1、我们使用@FeignClient(name = "myhuaweicloud", url = "https:/xxx.com/")

对接口进行注解。

接口中封装的方法有同通过

@PostMapping

@GetMapping 进行注解。

这两种请求方式对应。使用@PostMapping 注解,表示接口需要通过post进行请求,使用@GetMapping表示接口需要通过get请求。

2、看一下常见的参数传递方式

@RequestBody Map<String, Object> params

以body的方式传递json参数。

@RequestHeader(name = "Access-Token",required = true) String Token

请求头中传递参数

@RequestParam("device_name") String deviceName

已键值的方式拼接参数和值进行传递

http://www.lryc.cn/news/107739.html

相关文章:

  • springBoot多数据源使用tdengine(3.0.7.1)+MySQL+mybatisPlus+druid连接池
  • 剑指Offer 05.替换空格
  • ChatGPT的功能与特点
  • Vue2.0基础
  • rust 如何定义[u8]数组?
  • 关于Hive的使用技巧
  • 【C++】BSTree 模拟笔记
  • 5分钟快手入门laravel邮件通知
  • iOS——Block two
  • Ubuntu出现内部错误解决办法
  • 2023年中职组“网络安全”赛项吉安市竞赛任务书
  • ELK日志分析系统介绍及搭建(超详细)
  • docker 资源限制
  • HCIP 交换综合实验--企业三层架构
  • 微服务的基础使用
  • opencv-29 Otsu 处理(图像分割)
  • 网络中通过IP地址查找位置
  • MyBatis的动态SQL语句
  • 交互式AI技术与模型部署:bert-base-chinese模型交互式问答界面设置
  • Edge浏览器安装vue devtools
  • zookeeper基础
  • 【C++】类与对象(2)
  • 数据结构——绪论
  • Docker Dockerfile 语法与指令
  • 【LeetCode每日一题】——566.重塑矩阵
  • Manim(一款强大的数学可视化动画引擎)学习历程
  • powershell脚本写一个托盘图标
  • 前端Vue入门-day08-vant组件库
  • 华为OD机考--【磁盘容量排序】
  • 实现弧形切角两种方式