parse method

  1. @override
List<T> parse(
  1. dynamic rawData
)
override

解析数据 rawData 原始响应数据 返回解析后的目标数据

如果解析失败,应抛出 ParserException

Implementation

@override
List<T> parse(dynamic rawData) {
  if (rawData is! Map<String, dynamic>) {
    throw ParserException(
      '响应数据格式错误,期望 Map 类型,实际类型: ${rawData.runtimeType}',
      rawData: rawData,
    );
  }

  // 验证状态码
  if (validateStatusCode) {
    final code = rawData[NetworkConstants.fieldCode];
    final isSuccess = _isSuccessCode(code);
    if (code != null && !isSuccess) {
      final message = rawData[NetworkConstants.fieldMessage] ?? '请求失败';
      throw ParserException(
        '业务状态码错误: $message (code: $code)',
        rawData: rawData,
      );
    }
  }

  // 提取数据字段
  if (!rawData.containsKey(fieldName)) {
    throw ParserException('响应中不存在字段: $fieldName', rawData: rawData);
  }

  final data = rawData[fieldName];
  if (data is! List) {
    throw ParserException(
      '字段 $fieldName 不是列表类型,实际类型: ${data.runtimeType}',
      rawData: data,
    );
  }

  try {
    return data.map((item) => itemParser(item)).toList();
  } catch (e) {
    throw ParserException('列表项解析失败', rawData: data, originalError: e);
  }
}