Obsługa odpowiedzi
BodyHandlers i kody statusu
Obsługa odpowiedzi to bezpłatna lekcja Java Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Java Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Java Academy zawiera 4 lekcji w sumie.
Obsługa odpowiedzi
Każde wywołanie klienta HTTP zwraca obiekt HttpResponse<T>. Typ ogólny T zależy od przekazanego obiektu BodyHandler. W tej lekcji omówiono dostępne handlery oraz sposób interpretowania kodów statusu.
API HttpResponse
Najważniejsze metody obiektu HttpResponse:
statusCode()— status typu int.body()— zdekodowana treść typuT.headers()— nagłówki odpowiedzi.uri()— końcowy URI (po przekierowaniach).version()— HTTP/1.1 lub HTTP/2.
BodyHandlers.ofString
Najczęściej używany handler dekoduje treść do obiektu String, korzystając z kodowania znaków podanego w odpowiedzi, a w razie jego braku przyjmując UTF-8. Typ odpowiedzi to HttpResponse<String>.
import java.net.URI;
import java.net.http.*;
public class Main {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest req = HttpRequest.newBuilder()
.uri(URI.create("https://example.com")).build();
HttpResponse<String> res =
client.send(req, HttpResponse.BodyHandlers.ofString());
System.out.println(res.body().length());
}
}BodyHandlers.ofByteArray
W przypadku danych binarnych, takich jak obrazy, należy użyć metody ofByteArray(). Typem treści staje się byte[], które można zapisać na dysku lub samodzielnie zdekodować.
public class Main {
public static void main(String[] args) {
// ofByteArray() yields HttpResponse<byte[]>
byte[] simulated = { 1, 2, 3, 4 };
System.out.println("Bytes received: " + simulated.length);
}
}BodyHandlers.ofFile
ofFile(path) strumieniuje odpowiedź bezpośrednio na dysk i zwraca obiekt HttpResponse<Path>. Pozwala to uniknąć buforowania dużego pobranego pliku w pamięci.
import java.net.URI;
import java.net.http.*;
import java.nio.file.Path;
public class Main {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest req = HttpRequest.newBuilder()
.uri(URI.create("https://example.com/file.zip")).build();
HttpResponse<Path> res = client.send(req,
HttpResponse.BodyHandlers.ofFile(Path.of("out.zip")));
System.out.println("Saved to: " + res.body());
}
}BodyHandlers.discarding
Jeśli istotny jest tylko status i nagłówki, metoda discarding() odrzuca treść, tworząc obiekt HttpResponse<Void>. Pozwala to uniknąć kosztu buforowania.
Sprawdzanie powodzenia
Typowa metoda pomocnicza sprawdza, czy status mieści się w zakresie 2xx, zanim treść zostanie uznana za wiarygodną.
public class Main {
static boolean isSuccess(int code) {
return code >= 200 && code < 300;
}
public static void main(String[] args) {
System.out.println(isSuccess(204));
System.out.println(isSuccess(404));
}
}Reagowanie na kategorie statusów
Za pomocą instrukcji switch na pierwszej cyfrze można rozdzielić logikę obsługi powodzenia, przekierowań i błędów.
public class Main {
static String classify(int code) {
return switch (code / 100) {
case 2 -> "Success";
case 3 -> "Redirect";
case 4 -> "Client error";
case 5 -> "Server error";
default -> "Unknown";
};
}
public static void main(String[] args) {
System.out.println(classify(503));
System.out.println(classify(200));
}
}Mapowanie treści za pomocą mapping
BodyHandlers.mapping(upstream, fn) opakowuje inny handler i przekształca jego wynik. Można na przykład przekształcić treść tekstową w liczbę oznaczającą jej długość — wszystko wewnątrz handlera.
Odczytywanie konkretnego nagłówka
Aby odczytać wartość nagłówka odpowiedzi, należy użyć headers().firstValue(name), które zwraca obiekt Optional<String>. Aby pobrać wszystkie wartości powtarzającego się nagłówka, należy użyć allValues(name).
import java.util.Optional;
public class Main {
public static void main(String[] args) {
Optional<String> len = Optional.of("1024");
int contentLength = len.map(Integer::parseInt).orElse(0);
System.out.println("Content-Length: " + contentLength);
}
}Wybór handlera
- ofString — tekstowe i JSON-owe API.
- ofByteArray — małe dane binarne przechowywane w pamięci.
- ofFile — duże pliki pobierane strumieniowo na dysk.
- ofInputStream — przetwarzanie treści jako strumienia.
- discarding — żądania, w których istotny jest tylko status.
Szybki test
Proszę sprawdzić zrozumienie obsługi odpowiedzi.
Podsumowanie
Nauczyli się Państwo interpretować odpowiedzi HTTP:
- HttpResponse udostępnia metody
statusCode(),body()iheaders(). - BodyHandler określa typ treści: String, byte[], Path, Void lub strumień.
- W przypadku dużych pobrań należy użyć
ofFile, aby uniknąć nadmiernego zużycia pamięci. - Kody statusu należy klasyfikować na podstawie ich pierwszej cyfry, a zakres 2xx sprawdzać pod kątem pomyślnego zakończenia operacji.
- Wartości nagłówków należy odczytywać za pomocą
firstValue/allValues.
Ucz się Java dzięki korepetycjom AI — za darmo
Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.
- Kursy
- 104
- Lekcje
- 374
Często zadawane pytania
Czy lekcja „Obsługa odpowiedzi” jest bezpłatna?
Tak — pełny tekst „Obsługa odpowiedzi” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Java Academy, przejdź na CoddyKit PRO. Kurs Java Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Obsługa odpowiedzi”?
BodyHandlers i kody statusu Ćwiczysz Java Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Java Academy?
Nie wymagamy żadnego doświadczenia. Java Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.
Ile czasu zajmuje lekcja „Obsługa odpowiedzi”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Java Academy?
Tak. Każda lekcja Java Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- java.net.http.HttpClient
- Żądania asynchroniczne
- Treści żądań i nagłówki
- Obsługa odpowiedzi