onResponse method

  1. @override
Future<void> onResponse(
  1. RequestContext ctx,
  2. Response response
)
override

响应接收后调用

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;
}