parse method
解析数据
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);
}
}