Forest 是一款开源的 Java HTTP 客户端框架,它能够将 HTTP 的所有请求信息(包括 URL 、Header 以及 Body 等信息)绑定到您自定义的 Interface 方法上,能够通过调用本地接口方法的方式发送 HTTP 请求。
使用 Forest 就像使用类似 Dubbo 那样的 RPC 框架一样,只需要定义接口,调用接口即可,不必关心具体发送 HTTP 请求的细节。同时将 HTTP 请求信息与业务代码解耦,方便您统一管理大量 HTTP 的 URL 、Header 等信息。而请求的调用方完全不必在意 HTTP 的具体内容,即使该 HTTP 请求信息发生变更,大多数情况也不需要修改调用发送请求的代码。
项目仓库:https://gitee.com/dt_flys/forest
这次 1.5.0-RC1 版本新增了文件批量上传,以及处理 Cookie 的特性
/**
* 上传 Map 包装的文件列表
* 其中 ${_key} 代表 Map 中每一次迭代中的键值
*/
@Post("/upload")
ForestRequest<Map> uploadByteArrayMap(@DataFile(value = "file", fileName = "${_key}") Map<String, byte[]> byteArrayMap);
/**
* 上传 List 包装的文件列表
* 其中 ${_index} 代表每次迭代 List 的循环计数(从零开始计)
*/
@Post("/upload")
ForestRequest<Map> uploadByteArrayList(@DataFile(value = "file", fileName = "test-img-${_index}.jpg") List<byte[]> byteArrayList);
在请求接口的参数列表中加入 OnSaveCookie 和 OnLoadCookie 回调函数
OnSaveCookie: 在请求响应成功后,需要保存 Cookie 时调用该回调函数
OnLoadCookie: 在发送请求钱,需要加载 Cookie 时调用该回调函数
/**
* 登入接口(需要接受 Cookie)
*/
@Post("http://localhost:8080/login?username=foo")
ForestResponse testLogin(@Body UserLoginDTO userLogin, OnSaveCookie onSaveCookie);
/**
* 登入后测试接口(需要传入 Cookie)
*/
@Post("http://localhost:8080/test")
ForestResponse testAfterLogin(OnLoadCookie onLoadCookie);
保存和传送 Cookie 的代码
AtomicReference<ForestCookie> cookieAtomic = new AtomicReference<>(null);
// 调用登入接口
testClient.testLogin(userLogin, (request, cookies) -> {
// 将服务端传来的 Cookie 放入 cookieAtomic
cookieAtomic.set(cookies.allCookies().get(0));
});
// 获取 Cookie
ForestCookie cookie = cookieAtomic.get();
// 调用登入后的测试接口
ForestResponse response = testClient.testAfterLogin((request, cookies) -> {
// 将之前调用登入接口获得的 Cookie 传入请求发送到服务端
cookies.addCookie(cookie);
});
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.