Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗dtSpApErr 179 of 224 menu
◀ ▶

Ошибочный ответ API в Dart

Число в statusCode не всегда равно 200. Ошибочный ответ может содержать HTML или короткое сообщение, которое не стоит разбирать через fromJson как при успехе. Сам по себе код ошибки не выбрасывает исключение - его проверяют явно.

Сервис "/status/404" на httpbin специально возвращает "не найдено". Сначала проверяют код, и только при 200 разбирают тело:

import 'package:http/http.dart' as http; import 'dart:convert'; class EchoNote { EchoNote(this.note); final String note; factory EchoNote.fromJson(Map<String, Object?> json) { return EchoNote(json['note'] as String); } } void main() async { var response = await http.get( Uri.parse('https://httpbin.org/status/404'), ); var code = response.statusCode; if (code == 200) { var raw = jsonDecode(response.body); if (raw is Map<String, Object?>) { var note = EchoNote.fromJson(raw); print(note.note); } } else { print(code); } }

Локальная строка с синтаксической ошибкой JSON вызывает исключение при jsonDecode. Его перехватывают, чтобы программа завершилась штатно и напечатала текст причины:

import 'dart:convert'; void main() { var broken = '["a", "b", "c",]'; try { var raw = jsonDecode(broken); if (raw is List<Object?>) { raw.map((e) => e as String).toList(); } print('ok'); } catch (ex) { print(ex); } }

Дана строка с некорректным JSON. Попытайтесь получить из нее список строк. Выведите результат или текст ошибки, не прерывая работу программы аварийно.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить