Forest Forest
💒 首页
  • v1.5.30
  • v1.5.28
  • 🎄 ForestX
🌰 案例
💖 支持
🛫 更新记录
🧢 开发团队
⚒️ 参与贡献
  • MaxKey - 业界领先的身份管理和认证产品 (opens new window)
  • Snowy - 国内首个国密前后端分离快速开发平台 (opens new window)
  • Eoapi - 一个开源、可拓展的 API 工具平台 (opens new window)
  • Gitee (opens new window)
  • Github (opens new window)
💒 首页
  • v1.5.30
  • v1.5.28
  • 🎄 ForestX
🌰 案例
💖 支持
🛫 更新记录
🧢 开发团队
⚒️ 参与贡献
  • MaxKey - 业界领先的身份管理和认证产品 (opens new window)
  • Snowy - 国内首个国密前后端分离快速开发平台 (opens new window)
  • Eoapi - 一个开源、可拓展的 API 工具平台 (opens new window)
  • Gitee (opens new window)
  • Github (opens new window)
  • 序言

    • 🎁 新手介绍
    • 📖 文档
    • 🌰 使用案例
    • 🕵️‍ 关于作者
    • 👨‍🎓 贡献者列表
  • 入门

    • 🎬 安装配置说明
    • 🏹 Springboot环境安装
    • 📐 Springboot环境配置
    • 🎯 Springboot环境使用
    • 🏹 Springboot3环境安装
    • 📐 Springboot3环境配置
    • 🎯 Springboot3环境使用
    • 🏹 Spring环境安装
    • 📐 Spring环境配置
    • 🎯 Spring环境使用
    • 🏹 Solon环境安装
    • 📐 Solon环境配置
    • 🎯 Solon环境使用
    • 🏹 原生Java环境安装
    • 📐 原生Java环境配置
    • 🎯 原生Java环境使用
    • 🧬 编程式接口
    • 配置项

      • 👜 Springboot环境配置项
      • 👝 Spring环境配置项
      • 👜 Solon环境配置项
      • 🎒 原生Java环境配置项
      • 📚 配置优先级/作用域
    • 声明式接口

      • 🧱 构建接口
      • 🍀 请求方法
      • 🚚 请求地址
      • 🎈 URL 参数
      • 🍭 请求头
      • 👔 请求体
      • 🍮 后端框架
      • 🧁 接口注解
      • 📬 接收数据
      • 🍛 数据转换
      • 🍓 成功/失败条件
      • 🍌 重试机制
      • 🥂 重定向
      • 🍔 Gzip解压
      • 🎂 日志管理
      • ⚽ 回调函数
      • 🍟 异步请求
      • 🛡️ HTTPS
      • 🍪 使用Cookie
      • 🛸 使用代理
      • 🍉 上传下载
      • 🚑 异常处理
    • 编程式接口

      • 请求API

        • 🚀 请求对象
        • 🚢 请求属性
        • ✨ 执行请求
        • 🎊 后端框架
        • 🎪 请求类型
        • 🔮 请求地址
        • 🧀 URL 参数
        • 🚅 请求头
        • 🚋 请求体
        • ⚓ 回调函数
        • 🚁 异步请求
        • 🥯 Cookie
        • 🍜 成功/失败条件
        • 🌶️ 重试机制
        • ⛵ 重定向
        • 🛰️ 请求代理
      • 响应API

        • 🌠 响应对象
        • ✒️ 读取数据
        • 🦋 响应状态码
        • 🏥 响应错误处理
        • 🎧 响应头
        • 🥞 Cookie
    • 模板表达式

      • 🍬 Hello World
      • 🍹 配置属性引用
      • 🍖 变量引用
      • 🥃 动态变量绑定
      • 🥗 参数序号引用
      • 🍍 引用对象属性
      • 🥝 调用对象方法
    • 高级特性

      • 🥪 拦截器
      • 🍏 自定义注解
      • 🍇 组合注解
      • 🥑 自定义转换器
    • v1.5.30文档
    • 入门
    公子骏
    2022-07-01
    目录

    🧬 编程式接口

    Forest 是一个以接口 + 注解形式定义请求为主的HTTP框架,发送请求前先需要定义一个 interface 接口类,再组合使用 Forest 的注解(如:@Get)定义绑定的HTTP请求参数,随后再实例化接口类对象,最终调用该接口绑定HTTP参数注解的方法实现请求的发送。

    这样做有很多优点,比如在 Java 代码和 HTTP 协议之间实现解耦,同时方便众多请求接口的管理。但缺点也很明显:步骤较多,如果想要直接快速的请求一个简单的URL地址就显得过重了。

    不过,Forest 自 1.5.3 版本起,就提供了编程式接口,不用定义接口类也能发送请求,使用也很方便。

    # 发送请求

    以字符串形式接受响应数据

    // Get请求
    // 并以 String 类型接受数据
    String str = Forest.get("/").executeAsString();
    
    1
    2
    3

    以自定义类型形式接受响应数据

    // Post请求
    // 并以自定义的 MyResult 类型接受
    MyResult myResult = Forest.post("/").execute(MyResult.class);
    
    1
    2
    3

    以带复杂泛型参数的类型形式接受响应数据

    // 通过 TypeReference 引用类传递泛型参数
    // 就可以将响应数据以带复杂泛型参数的类型接受了
    Result<List<User>> userList = Forest.post("/")
            .execute(new TypeReference<Result<List<User>>>() {});
    
    1
    2
    3
    4

    异步请求

    // 异步 Post 请求
    // 通过 onSuccess 回调函数处理请求成功后的结果
    // 而 onError 回调函数则在请求失败后被触发
    Forest.post("/")
            .async()
            .onSuccess(((data, req, res) -> {
                // data 为响应成功后返回的反序列化过的数据
                // req 为Forest请求对象,即 ForestRequest 类实例
                // res 为Forest响应对象,即 ForestResponse 类实例
            }))
            .onError(((ex, req, res) -> {
                // ex 为请求过程可能抛出的异常对象
                // req 为Forest请求对象,即 ForestRequest 类实例
                // res 为Forest响应对象,即 ForestResponse 类实例
            }))
            .execute();
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16

    定义请求的各种参数

    // 定义各种参数
    // 并以 Map 类型接受
    Map<String, Object> map = Forest.post("/")
          .backend("okhttp3")        // 设置后端为 okhttp3
          .host("127.0.0.1")         // 设置地址的host为 127.0.0.1
          .port(8080)                // 设置地址的端口为 8080
          .contentTypeJson()         // 设置 Content-Type 头为 application/json
          .addBody("a", 1)           // 添加 Body 项(键值对): a, 1
          .addBody("b", 2)           // 添加 Body 项(键值对): b, 2
          .maxRetryCount(3)          // 设置请求最大重试次数为 3
          // 设置 onSuccess 回调函数
          .onSuccess((data, req, res) -> { log.info("success!"); })
          // 设置 onError 回调函数
          .onError((ex, req, res) -> { log.info("error!"); })
          // 设置请求成功判断条件回调函数
          .successWhen((req, res) -> res.noException() && res.statusOk())
          // 执行并返回Map数据类型对象
          .executeAsMap();
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18

    Forest 的快速接口(如:Forest.get(String url)、Forest.post(String url)等方法)本质上是返回了一个 Forest 请求对象(即 ForestRequest 类对象),Forest 的绝大部分操作都是围绕请求对象所作的工作。

    文档导航

    要详细了解 Forest 请求对象如何使用,请参见《请求对象》

    帮助我们改善此文档 (opens new window)
    上次更新: 2023/03/13, 15:28:40
    🎯 原生Java环境使用
    👜 Springboot环境配置项

    ← 🎯 原生Java环境使用 👜 Springboot环境配置项→

    Theme by Vdoing | Copyright © 2016-2023 公子骏 | MIT License
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式