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

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

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

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

import com.fasterxml.jackson.databind.ObjectMapper; import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; public record EchoNote(String note) {} public class Main { public static void main(String[] args) throws Exception { HttpClient client = HttpClient.newBuilder().build(); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://httpbin.org/status/404")) .GET() .build(); HttpResponse<String> response = client.send( request, HttpResponse.BodyHandlers.ofString(), ); int code = response.statusCode(); if (code == 200) { ObjectMapper mapper = new ObjectMapper(); EchoNote note = mapper.readValue( response.body(), EchoNote.class, ); System.out.println(note.note()); } else { System.out.println(code); } } }

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

import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import java.util.List; public class Main { public static void main(String[] args) { String broken = "[\"a\", \"b\", \"c\",]"; ObjectMapper mapper = new ObjectMapper(); try { List<String> items = mapper.readValue( broken, new TypeReference<List<String>>() {}, ); System.out.println("ok"); } catch (Exception ex) { System.out.println(ex.getMessage()); } } }

Дан код:

String json = "[1, 2,";

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

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