🚑 异常处理
发送HTTP请求不会总是成功的,总会有失败的情况。Forest提供多种异常处理的方法来处理请求失败的过程。
# try-catch方式
最常用的是直接用try-catch
。Forest请求失败的时候通常会以抛异常的方式报告错误, 获取错误信息只需捕获ForestNetworkException
异常类的对象,如示例代码所示:
/**
* try-catch方式:捕获ForestNetworkException异常类的对象
*/
try {
String result = myClient.send();
} catch (ForestNetworkException ex) {
int status = ex.getStatusCode(); // 获取请求响应状态码
ForestResponse response = ex.getResponse(); // 获取Response对象
String content = response.getContent(); // 获取请求的响应内容
String resResult = response.getResult(); // 获取方法返回类型对应的最终数据结果
}
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# 回调函数方式
第二种方式是使用OnError
回调函数,如示例代码所示:
/**
* 在请求接口中定义OnError回调函数类型参数
*/
@Request(
url = "http://localhost:8080/hello/user",
headers = {"Accept:text/plain"},
data = "username=${username}"
)
String send(@Var("username") String username, OnError onError);
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
调用的代码如下:
// 在调用接口时,在Lambda中处理错误结果
myClient.send("foo", (ex, request, response) -> {
int status = response.getStatusCode(); // 获取请求响应状态码
String content = response.getContent(); // 获取请求的响应内容
String result = response.getResult(); // 获取方法返回类型对应的最终数据结果
});
1
2
3
4
5
6
2
3
4
5
6
注意
加上OnError回调函数后便不会再向上抛出异常,所有错误信息均通过OnError回调函数的参数获得。
# ForestResponse
第三种,用ForestResponse
类作为请求方法的返回值类型,示例代码如下:
/**
* 用`ForestResponse`类作为请求方法的返回值类型, 其泛型参数代表实际返回数据的类型
*/
@Request(
url = "http://localhost:8080/hello/user",
headers = {"Accept:text/plain"},
data = "username=${username}"
)
ForestResponse<String> send(@Var("username") String username);
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
调用和处理的过程如下:
ForestResponse<String> response = myClient.send("foo");
// 用isError方法判断请求是否失败, 比如404, 500等情况
if (response.isError()) {
int status = response.getStatusCode(); // 获取请求响应状态码
String content = response.getContent(); // 获取请求的响应内容
String result = response.getResult(); // 获取方法返回类型对应的最终数据结果
}
1
2
3
4
5
6
7
2
3
4
5
6
7
注意
以ForestResponse类为返回值类型的方法也不会向上抛出异常,错误信息均通过ForestResponse对象获得。
# 拦截器方式
若要批量处理各种不同请求的异常情况,可以定义一个拦截器, 并在拦截器的onError
方法中处理异常,示例代码如下:
public class ErrorInterceptor implements Interceptor<String> {
// ... ...
@Override
public void onError(ForestRuntimeException ex, ForestRequest request, ForestResponse response) {
int status = response.getStatusCode(); // 获取请求响应状态码
String content = response.getContent(); // 获取请求的响应内容
Object result = response.getResult(); // 获取方法返回类型对应的返回数据结果
}
}
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
提示
关于具体如何使用拦截器请参见 《拦截器》
帮助我们改善此文档 (opens new window)
上次更新: 2023/06/19, 17:37:19