parse method
解析数据
rawData 原始响应数据
返回解析后的目标数据
如果解析失败,应抛出 ParserException
Implementation
@override
T parse(dynamic rawData) {
if (rawData is! Map<String, dynamic>) {
throw ParserException(
'响应数据格式错误,期望 Map 类型,实际类型: ${rawData.runtimeType}',
rawData: rawData,
);
}
// 验证成功标志(如果需要)
if (validateSuccess) {
final success = rawData['success'];
if (success != true) {
final error = rawData['error'] ?? '未知错误';
throw ParserException('请求失败: $error', 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,
);
}
}