目录
1.入门
什么是forest?
Forest 是一个开源的 Java HTTP 客户端框架,它能够将 HTTP 的所有请求信息(包括 URL、Header 以及 Body 等信息)绑定到您自定义的 Interface 方法上,能够通过调用本地接口方法的方式发送 HTTP 请求。
为什么使用forest?
使用 Forest 就像使用类似 Dubbo 那样的 RPC 框架一样,只需要定义接口,调用接口即可,不必关心具体发送 HTTP 请求的细节。同时将 HTTP 请求信息与业务代码解耦,方便您统一管理大量 HTTP 的 URL、Header 等信息。而请求的调用方完全不必在意 HTTP 的具体内容,即使该 HTTP 请求信息发生变更,大多数情况也不需要修改调用发送请求的代码。
Forest 如何使用?
Forest 不需要您编写具体的 HTTP 调用过程,只需要您定义一个接口,然后通过 Forest 注解将 HTTP 请求的信息添加到接口的方法上即可。请求发送方通过调用您定义的接口便能自动发送请求和接受请求的响应。
Forest 的工作原理
Forest 会将您定义好的接口通过动态代理的方式生成一个具体的实现类,然后组织、验证 HTTP 请求信息,绑定动态数据,转换数据形式,SSL 验证签名,调用后端 HTTP API(httpclient 等 API)执行实际请求,等待响应,失败重试,转换响应数据到 Java 类型等脏活累活都由这动态代理的实现类给包了。 请求发送方调用这个接口时,实际上就是在调用这个干脏活累活的实现类。
Forest 的架构
所需环境
Forest 1.0.x 和 Forest 1.1.x 基于 JDK 1.7, Forest 1.2.x及以上版本基于 JDK 1.8
2.安装
Spring Boot项目
若您的项目基于
Spring Boot
,那只要添加下面一个 maven 依赖便可。
<dependency>
<groupId>com.dtflys.forest</groupId>
<artifactId>forest-spring-boot-starter</artifactId>
<version>1.5.2-BETA</version>
</dependency>
Spring项目
若您的项目基于非
Spring Boot
的普通Spring
项目,则需添加 Forest 核心包依赖和 Forest Spring 包依赖
<dependency>
<groupId>com.dtflys.forest</groupId>
<artifactId>forest-core</artifactId>
<version>1.5.2-BETA</version>
</dependency>
<dependency>
<groupId>com.dtflys.forest</groupId>
<artifactId>forest-spring</artifactId>
<version>1.5.2-BETA</version>
</dependency>
非Spring普通项目
若您的项目既非
Spring Boot
也非普通Spring
项目,只需添加 Forest 核心包依赖
<dependency>
<groupId>com.dtflys.forest</groupId>
<artifactId>forest-core</artifactId>
<version>1.5.2-BETA</version>
</dependency>
添加JSON框架依赖
如果您的项目中还没有JSON解析框架,如
Fastjson
或Jackson
,请根据需要添加以下依赖。如果已经有了,可以跳过此步
Fastjson依赖:版本 >= 1.2.48
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.48</version>
</dependency>
Jackson依赖:版本 >= 2.9.10
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.10</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.10</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.10</version>
</dependency>
3.快速上手
Hello World
创建一个
interface
,比如命名为MyClient
,并创建一个接口方法名为helloForest
,用@Request
注解修饰之。
src/main/java/com/yoursite/client/MyClient.java
public interface MyClient {
@Request(url = "http://localhost:8080/hello")
String helloForest();
}
通过
@Request
注解,将上面的MyClient
接口中的helloForest()
方法绑定了一个 HTTP 请求, 其 URL 为http://localhost:8080/hello
,并默认使用GET
方式,且将请求响应的数据以String
的方式返回给调用者。
发送请求
若您已有定义好的 Forest 请求接口(比如名为 com.yoursite.client.MyClient
),那就可以开始愉快使用它了。
在 Spring Boot 项目中调用接口
只要在
Spring Boot
的配置类或者启动类上加上@ForestScan
注解,并在basePackages
属性里填上远程接口的所在的包名
src/main/java/MyApp.java
@SpringBootApplication
@Configuration
@ForestScan(basePackages = "com.yoursite.client")
public class MyApp {
...
}
Forest 会扫描
@ForestScan
注解中basePackages
属性指定的包下面所有的接口,然后会将符合条件的接口进行动态代理并注入到 Spring 的上下文中。
1.5.1以后版本可以跳过此步,不需要 @ForestScan 注解来指定扫描的包范围
然后便能在其他代码中从 Spring 上下文注入接口实例,然后如调用普通接口那样调用即可。
@Component
public class MyService {
@Autowired
private MyClient myClient;
public void testClient() {
String result = myClient.helloForest();
System.out.println(result);
}
}
想要了解更多的进阶操作,可以关注下面这个公众号,然后在公众号中输入forest