onResponse method
响应接收后调用
Implementation
@override
Future<void> onResponse(
RequestContext ctx,
Response response,
) async {
final data = response.data;
// 非 Map 响应跳过解析
if (data is! Map) {
if (skipNonMap) return;
throw BusinessError(
code: 'PARSE_ERROR',
serverMessage: 'Response is not a Map',
rawResponse: data,
requestOptions: response.requestOptions,
);
}
// 获取 key 映射(优先使用请求级覆盖)
final km = _getKeyMap(ctx);
// 解析响应字段
final code = data[km.codeKey];
final msg = data[km.msgKey];
final parsed = data[km.dataKey];
// 判断业务是否成功
final isSuccess = _checkSuccess(code);
if (!isSuccess) {
throw BusinessError(
code: code?.toString() ?? '',
serverMessage: msg?.toString() ?? '',
rawResponse: data,
requestOptions: response.requestOptions,
);
}
// 存储解析后的数据供后续使用
ctx.extras[kParsedDataKey] = parsed;
}