![]()
Forest介绍
Forest 是一个开源的 Java HTTP 客户端框架,它能够将 HTTP 的所有请求信息(包括 URL、Header 以及 Body 等信息)绑定到您自定义的 Interface 方法上,能够通过调用本地接口方法的方式发送 HTTP 请求
现已 2.1k star
![]()
Forest 如何使用
Forest 不需要您编写具体的 HTTP 调用过程,只需要您定义一个接口,然后通过 Forest 注解将 HTTP 请求的信息添加到接口的方法上即可。请求发送方通过调用您定义的接口便能自动发送请求和接受请求的响应
Forest 的工作原理
Forest 会将您定义好的接口通过动态代理的方式生成一个具体的实现类,然后组织、验证 HTTP 请求信息,绑定动态数据,转换数据形式,SSL 验证签名,调用后端 HTTP API(httpclient 等 API)执行实际请求,等待响应,失败重试,转换响应数据到 Java 类型等脏活累活都由这动态代理的实现类给包了。 请求发送方调用这个接口时,实际上就是在调用这个干脏活累活的实现类
文档和示例
重点更新内容
动态正向代理来源
定义一个实现 HTTPProxySource 接口的类
// 自定义正向代理来源类
// 可以根据请求对象的信息来动态产生该请求所需的正向代理信息
public class MyHTTPProxySource implements HTTPProxySource {
@Override
public ForestProxy getProxy(ForestRequest request) {
// request.variableValue 方法可以获取全局或请求变量
// 返回值将以 ForestProxy 类对象形式包装正向代理信息
return new ForestProxy("127.0.0.1", (Integer) request.variableValue("port"));
}
}
在接口中绑定
// 通过 HTTPProxy 注解的 source 属性指定自定义的正向代理来源类
@Post("/data")
@HTTPProxy(source = MyHTTPProxySource.class)
ForestRequest<String> sendData(@Var("port") int port);
本次更新
新增特性
修复问题
其它更新
- refactor: 去掉 NameUtils 工具类中重复的if分支
特别鸣谢
本次更新有 @chming 参与贡献,万分感谢!