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文档
  • 编程式接口
  • 请求API
公子骏
2022-07-14

🍜 成功/失败条件

Forest 请求每次发送后都会判断是否成功 (不成功即失败)

默认的请求成功条件如下

[x] 没有异常: 包括网络连接不通、IO错误、超时等异常

[x] 响应状态码在正常范围内: >= 100 并且 < 400

一般成功的状态码为200, 所以默认成功条件满足绝大多数场景,但也免不了有些API接口不以此为标准,比如400也为正常状态码; 还有状态码为 200, 但返回JSON数据中的状态为失败也为失败。

为适应这种,Forest 提供了可自定义的成功/失败条件

successWhen(SuccessWhen successWhen) 设置成功条件: 用于判断请求是否成功/失败

  • 参数successWhen: SuccessWhen 接口实现类实例
Forest.post("/")
     // 设置成功/失败条件
     // 返回 true 为成功,false 为失败
    .successWhen(((req, res) -> {
        // req 为Forest请求对象,即 ForestRequest 类实例
        // res 为Forest响应对象,即 ForestResponse 类实例
        return res.noException() &&   // 请求过程没有异常
                res.statusOk() &&     // 状态码在 100 ~ 399 范围内
                res.statusIsNot(203); // 但不能是 203
    }))
    .onError((ex, req, res) -> {
        System.out.println("失败!");
    })
    .exeute();
// 若服务端返回的状态码为 203, 
// 即便请求过程都成功,
// 也会被认为是失败,并执行 onError
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

使用自定义成功/失败条件实现类

setSuccessWhen(Class<? extends SuccessWhen> conditionClass) 设置成功条件,用于判断请求是否成功/失败

  • 参数conditionClass: SuccessWhen 实现类的 Class 对象

先定义成功/失败条件实现类

// 自定义成功/失败条件实现类
// 需要实现 SuccessWhen 接口
public class MySuccessCondition implements SuccessWhen {

    /**
     * 请求成功条件
     * @param req Forest请求对象
     * @param res Forest响应对象
     * @return true 请求成功,false 请求失败
     */
    @Override
    public boolean successWhen(ForestRequest req, ForestResponse res) {
        return res.noException() &&   // 请求过程没有异常
                res.statusOk() &&     // 状态码在 100 ~ 399 范围内
                res.statusIsNot(203); // 但不能是 203
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

通过 Forest 请求对象的setSuccessWhen(Class<? extends SuccessWhen> conditionClass)方法设置该条件类

Forest.post("/")
     // 设置成功/失败条件实现类
    .successWhen(MySuccessCondition.class)
    .onError((ex, req, res) -> {
        System.out.println("失败!");
    })
    .exeute();
// 若服务端返回的状态码为 203, 
// 即便请求过程都成功,
// 也会被认为是失败,并执行 onError
1
2
3
4
5
6
7
8
9
10
帮助我们改善此文档 (opens new window)
上次更新: 2023/03/13, 15:28:40
🥯 Cookie
🌶️ 重试机制

← 🥯 Cookie 🌶️ 重试机制→

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