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

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

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

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

import java.net.URI import java.net.http.HttpClient import java.net.http.HttpRequest import java.net.http.HttpResponse import kotlinx.serialization.Serializable import kotlinx.serialization.json.Json @Serializable data class EchoNote(val note: String) fun main() { val client = HttpClient.newBuilder().build() val request = HttpRequest.newBuilder() .uri(URI.create("https://httpbin.org/status/404")) .GET() .build() val response = client.send( request, HttpResponse.BodyHandlers.ofString(), ) val code = response.statusCode() if (code == 200) { val note = Json.decodeFromString<EchoNote>( response.body(), ) println(note.note) } else { println(code) } }

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

import kotlinx.serialization.json.Json fun main() { val broken = """["a", "b", "c",]""" try { Json.decodeFromString<List<String>>(broken) println("ok") } catch (ex: Exception) { println(ex.message) } }

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

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