V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
DtFlys
V2EX  ›  开源软件

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

  •  
  •   DtFlys · 2020-12-18 14:15:12 +08:00 · 1612 次点击
    这是一个创建于 1468 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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);
    });
    
    
    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1585 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 16:58 · PVG 00:58 · LAX 08:58 · JFK 11:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.