🍜 成功/失败条件
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
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
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
2
3
4
5
6
7
8
9
10
帮助我们改善此文档  (opens new window)
  上次更新: 2024/12/26, 12:59:11