方便处理文件批量上传和 Cookie, Forest 1.5.0-RC1 发布

2020-12-18 14:15:12 +08:00
 DtFlys

Forest 是一款开源的 Java HTTP 客户端框架,它能够将 HTTP 的所有请求信息(包括 URL 、Header 以及 Body 等信息)绑定到您自定义的 Interface 方法上,能够通过调用本地接口方法的方式发送 HTTP 请求。

使用 Forest 就像使用类似 Dubbo 那样的 RPC 框架一样,只需要定义接口,调用接口即可,不必关心具体发送 HTTP 请求的细节。同时将 HTTP 请求信息与业务代码解耦,方便您统一管理大量 HTTP 的 URL 、Header 等信息。而请求的调用方完全不必在意 HTTP 的具体内容,即使该 HTTP 请求信息发生变更,大多数情况也不需要修改调用发送请求的代码。

项目主页:http://forest.dtflyx.com

项目仓库: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);

处理 Cookie

在请求接口的参数列表中加入 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);
});

1418 次点击
所在节点    开源软件
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/736761

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX