轻量级声明式的Http库——Feign的独立使用
作者:coding途中 发布时间:2022-06-05 04:36:19
目录
前沿
快速开始
引入依赖
定义接口
配置类
开始调用
json序列化
接口层面指定header:
指定Encoder跟Decoder
使用 *
注解详解
@RequestLine("GET /messages/detail")
@Param("name")
@Headers({"Accept:/", "Accept-Language: zh-cn"})
@Body("{name}")
@QueryMap
@HeaderMap
前沿
项目中我们经常会使用HTTP工具向外部的REST接口发送请求,大家一般使用Okhttp,或者java的HttpClient发起,今天给大家介绍一款轻量级声明式的Http库(FeignClient),使用起来会使我们的项目代码更整洁,利于维护!
快速开始
Feign是spring cloud中服务消费端的调用框架,通常与ribbon,hystrix等组合使用。 但是在某些项目中,由于遗留原因,整个系统并不是spring cloud项目,甚至不是spring项目,而使用者关注的重点仅仅是简化http调用代码的编写。 如果采用httpclient或者okhttp这样相对较重的框架,对初学者来说编码量与学习曲线都会是一个挑战,而使用spring中RestTemplate,又没有配置化的解决方案,由此想到是否可以脱离spring cloud,独立使用Feign。
引入依赖
<dependency>
<groupId>com.netflix.feign</groupId>
<artifactId>feign-core</artifactId>
<version>8.18.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.netflix.feign/feign-gson -->
<dependency>
<groupId>com.netflix.feign</groupId>
<artifactId>feign-gson</artifactId>
<version>8.18.0</version>
</dependency>
定义接口
public interface OuterService {
@RequestLine("GET /requesr/list?name={name}")
@Headers("Authorization: Basic {token}")
String request(@Param(value = "name") String name,@Param(value = "token") String token);
}
通过@RequestLine指定HTTP请求方式及URL地址,@Param指定参数,可以在url或者header中使用{参数名}去填充请求参数。
配置类
OuterService service = Feign.builder()
.options(new Options(1000, 3500))
.retryer(new Retryer.Default(5000, 5000, 3))
.target(OuterService.class, http://127.0.0.1:8085);
开始调用
service.request("test","ad12hj3bhj1b23hj1b2");
json序列化
在项目中,我们发起的Http请求往往都是json格式,feign同样提供基于json的对象转换工具,方便我们直接以对象形式交互。
接口层面指定header:
@Headers({"Content-Type: application/json","Accept: application/json"})
指定Encoder跟Decoder
## 指定Gson序列化。也可以使用Jackson序列化(引入其依赖)
OuterService service = Feign.builder()
.encoder(new GsonEncoder())
.decoder(new GsonDecoder())
.options(new Options(1000, 3500))
.retryer(new Retryer.Default(5000, 5000, 3))
.target(OuterService.class, http://127.0.0.1:8085);
支持我们完成声明式Http接口调用
使用 *
在配置代理类时可以自定义 *
OuterService service = Feign.builder()
.encoder(new GsonEncoder())
.decoder(new GsonDecoder())
.requestInterceptor(template -> {
// template 可以获取/修改body,header等信息
})
.options(new Options(1000, 3500))
.retryer(new Retryer.Default(5000, 5000, 3))
.target(OuterService.class, http://127.0.0.1:8085);
注解详解
@RequestLine("GET /messages/detail")
指定请求方式跟请求URL
## get请求
@RequestLine("GET /messages/detail?msg_ids={msgIds}")
## post请求
@RequestLine("POST /messages/detail?msg_ids={msgIds}")
@Param("name")
绑定参数别名,可以在RequestLine/body/headers等注解中通过{参数名}去获取值。
@Headers({"Accept:/", "Accept-Language: zh-cn"})
指定请求header
@Body("{name}")
指定请求返回body值为请求参数name
@QueryMap
只能标注在方法参数上。用于传递多个查询值,拼接在URL后面,只能标注在Map类型的参数前面,否则报错。
@HeaderMap
同上,只是用在Header上而已
来源:https://www.cnblogs.com/1ssqq1lxr/p/14713083.html


猜你喜欢
- 使用异步包(推荐)async包由 Dart 编程语言的作者开发和发布。它提供了dart:async风格的实用程序来增强异步计算。可以帮助我们
- 枚举(Enum)定义enum关键字用于声明枚举,即一种由一组称为枚举数列表的命名常量组成的独特类型。通常情况下,最好是在命名空间内直接定义枚
- 本文实例讲述了Android编程滑动效果之Gallery仿图像集浏览实现方法。分享给大家供大家参考,具体如下:Android系统自带一个Ga
- 本文实例讲述了C#通过链表实现队列的方法。分享给大家供大家参考。具体实现方法如下:public class Node{ public int
- 本文实例为大家分享了Android实现界面跳转的具体代码,供大家参考,具体内容如下布局<?xml version="1.0&
- 本文实例讲述了C#实现的算24点游戏算法。分享给大家供大家参考。具体如下:using System;using System.Collect
- 工作中有做过手机App项目,前端和android或ios程序员配合完成整个项目的开发,开发过程中与ios程序配合基本没什么问题,而andro
- 前言有时候我们在项目中,会用到一些本地 jar 包文件,比如隔壁公司自己打包的;此时无法从maven远程仓库拉取;那么我们可以考虑把 jar
- 这是主要使用到的jar 文件是:spring mvc +apache common-fileuplad第一步:web.xml 文件。【重点是
- 由于项目需求,需要为Java提供一套支持事件驱动机制的类库,可以实现类似于C#中的event和delegate机制。众所周知,Java语言本
- Android Notification的多种用法总结我们在用手机的时候,如果来了短信,而我们没有点击查看的话,是不是在手机的最上边的状态栏
- @Transactional是我们在用Spring时候几乎逃不掉的一个注解,该注解主要用来声明事务。它的实现原理是通过Spring AOP在
- 一、简介Join方法主要是用来阻塞调用线程,直到某个线程终止或经过了指定时间为止。官方的解释比较乏味,通俗的说就是创建一个子线程,给它加了这
- 一.前言解决服务雪崩效应,都是避免application client请求application service时,出现服务调用错误或网络问
- RestTemplate设计是为了Spring更好的请求并解析Restful风格的接口返回值而设计的,通过这个类可以在请求接口时直接解析对应
- 在查询时经常出现一对多”的关系,所有会出现嵌套对象的情况,Mybatis在resultMap提供了collection标
- 新手当在一个类文件中进行了一些操作之后,会造成sout快捷命令无法自动生成。比如操作了import引入其它包之后。主要是对IDEA操作的不熟
- 我们玩玩手机的录像功能吧。做个DEMO。 看看录制过程: mediarecorder = new MediaRecorder();// 创建
- 由于所爬取的网站需要验证码,通过网页的开发人员工具【F12】及在线http post,get接口测试请求工具(http://coolaf.c
- 1.SpringBoot AOP功能1.1 LTW与不同的切面织入时机AOP——面向切面编程,通过为