parse method

  1. @override
T parse(
  1. dynamic rawData
)
override

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

如果解析失败,应抛出 ParserException

Implementation

@override
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);
  }

  try {
    return rawData[fieldName] as T;
  } catch (e) {
    throw ParserException(
      '无法将字段 $fieldName 转换为目标类型 $T',
      rawData: rawData[fieldName],
      originalError: e,
    );
  }
}