3.1K Star,推荐一款声明式HTTP客户端框架Forest
Forest 是一个开源的 Java HTTP 客户端框架,它能够将 HTTP 的所有请求信息(包括 URL、Header 以及 Body 等信息)绑定到您自定义的 Interface 方法上,能够通过调用本地接口方法的方式发送 HTTP 请求。
🕵️Forest架构
Forest 遵循约定大于配置的理念,大多数情况下不需要进行配置,或填写非常简单的配置即可。但不同项目环境配置方式各有不同,需要根据项目需要,选择不同的环境进行配置。
官网:
https://forest.dtflyx.com/
🎉 优点
🍭 容易上手
☕ 简单优雅
🧩 扩展灵活
能使用自定义拦截器和自定义注解来扩展Forest的能力,即使面对意想不到的场景也能轻松应对
🎉 特性
支持 声明式接口,方便与业务代码解耦
支持 编程式接口,方便快速访问请求
支持底层 HTTP 库: OkHttp 3
支持底层 HTTP 库: Httpclient
不依赖中间件
支持 GET、POST 等所有请求方法
约定大于配置
自动 JSON、XML、Protobuf 转换
支持 自定义转换器
多种加签方式
支持 Spring 和 Springboot 集成
支持 上传下载
支持 模板表达式
支持 拦截器
支持 自定义注解
支持 异步请求
🎨 最新版本
<!-- Forest Spring Boot 启动包 -->
<dependency>
<groupId>com.dtflys.forest</groupId>
<artifactId>forest-spring-boot-starter</artifactId>
<version>1.5.33</version>
</dependency>
<!-- Forest JAXB 扩展包 -->
<dependency>
<groupId>com.dtflys.forest</groupId>
<artifactId>forest-jaxb</artifactId>
<version>1.5.33</version>
</dependency>
🎬 安装配置说明
Forest 可适配集成 Springboot、Spring 等多种不同的项目环境,也可直接在普通的 Java 项目中使用,可以根据项目需要,选择不同的环境进行安装,本文以整合springboot项目为演示案例。
🌰所需环境
JDK版本: 8+
可集成的 spring boot 版本: 1.x, 2.x
也可不依赖 spring boot 和 spring
1、添加 forest-spring-boot-starter 依赖
<dependency>
<groupId>com.dtflys.forest</groupId>
<artifactId>forest-spring-boot-starter</artifactId>
<version>1.5.33</version>
</dependency>
2、在application.yaml / application.properties中配置的 HTTP 基本参数
# 连接池最大连接数
forest.max-connections=1000
# 连接超时时间,单位为毫秒
forest.connect-timeout=3000
# 数据读取超时时间,单位为毫秒
forest.read-timeout=3000
3、配置springboot扫描接口
@SpringBootApplication
@Configuration
@ForestScan(basePackages = "com.yoursite.client")
public class MyApp {
...
}
4、创建一个interface
,比如命名为MyClient
,并创建一个接口方法名为helloForest
,用@Get
注解修饰之。
public interface MyClient {
@Get("http://localhost:8080/hello")
String helloForest();
}
5、从Spring上下文注入接口实例,然后如调用普通接口那样调用
@Component
public class MyService {
// 注入自定义的 Forest 接口实例
@Resource
private MyClient myClient;
public void testClient() {
// 调用自定义的 Forest 接口方法
// 等价于发送 HTTP 请求,请求地址和参数即为 helloForest 方法上注解所标识的内容
String result = myClient.helloForest();
// result 即为 HTTP 请求响应后返回的字符串类型数据
System.out.println(result);
}
}
Forest就字面意思而言,就是森林的意思。但仔细看可以拆成For和Rest两个单词,也就是“为了Rest”(Rest为一种基于HTTP的架构风格)。而合起来就是森林,森林由很多树木花草组成(可以理解为各种不同的服务),它们表面上看独立,实则在地下根茎交错纵横、相互连接依存,这样看就有点现代分布式服务化的味道了。最后,这两个单词反过来读就像是RESTful。
git开源地址:
https://gitee.com/dromara/forest
https://github.com/dromara/forest
点点关注不迷路