Java Academy · Lekcja

Obsługa odpowiedzi

BodyHandlers i kody statusu

Lekcja 4 z 413 kroki

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ść typu T.
  • 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() i headers().
  • 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.
Bezpłatny start

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

  1. java.net.http.HttpClient
  2. Żądania asynchroniczne
  3. Treści żądań i nagłówki
  4. Obsługa odpowiedzi
← Powrót do Java Academy