面试题答案
一键面试常见场景及作用
- 请求拦截:
- 作用:在请求发送之前对请求进行统一处理。例如,添加通用的请求头,如认证令牌(token),这样每个请求都能携带必要的身份验证信息;修改请求参数,根据不同环境或业务规则调整请求数据;对请求进行日志记录,方便跟踪和调试请求流程。
- 响应拦截:
- 作用:在接收到响应后,对响应进行统一处理。比如,检查响应状态码,若状态码表示未授权(如401),可以自动处理登录过期逻辑,引导用户重新登录;对响应数据进行统一格式化处理,如解析通用的数据结构,提取真正需要的数据部分;记录响应日志,监控响应时间、数据大小等信息,用于性能分析和问题排查。
实现基础请求拦截器
- 首先添加
dio
依赖到pubspec.yaml
文件并获取依赖:
dependencies:
dio: ^[具体版本号]
然后在终端运行flutter pub get
。
2. 实现请求拦截器代码如下:
import 'package:dio/dio.dart';
void main() async {
Dio dio = Dio();
// 添加请求拦截器
dio.interceptors.add(InterceptorsWrapper(
onRequest: (Options options, RequestInterceptorHandler handler) {
// 添加通用请求头
options.headers['Authorization'] = 'Bearer your_token';
// 记录请求日志
print('请求URL: ${options.uri}');
print('请求方法: ${options.method}');
print('请求头: ${options.headers}');
print('请求参数: ${options.data}');
// 继续请求
handler.next(options);
},
));
try {
Response response = await dio.get('https://example.com/api');
print('响应数据: ${response.data}');
} catch (e) {
print('请求错误: $e');
}
}
在上述代码中,InterceptorsWrapper
类用于创建拦截器。onRequest
回调函数在请求发送前被调用,在这里可以对Options
进行修改,如添加请求头、记录日志等操作,最后通过handler.next(options)
让请求继续执行。