0Pricing
Java Academy · บทเรียน

การจัดการการตอบกลับ

BodyHandlers และรหัสสถานะ

การจัดการการตอบกลับ เป็นบทเรียน Java Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Java Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Java Academy มีบทเรียนทั้งหมด 4 บทเรียน

การจัดการการตอบกลับ

ทุกการเรียกใช้ไคลเอนต์ HTTP จะส่งคืน HttpResponse<T> ประเภททั่วไป T จะถูกกำหนดโดย BodyHandler ที่คุณส่งให้ บทเรียนนี้จะสำรวจตัวจัดการที่มีให้ใช้และวิธีตีความรหัสสถานะ

API ของ HttpResponse

เมธอดสำคัญใน HttpResponse:

  • statusCode() — สถานะชนิด int
  • body() — เนื้อหาที่ถอดรหัสแล้ว ซึ่งมีประเภทเป็น T
  • headers() — ส่วนหัวการตอบกลับ
  • uri() — URI สุดท้ายหลังการเปลี่ยนเส้นทาง
  • version() — HTTP/1.1 หรือ HTTP/2

BodyHandlers.ofString

ตัวจัดการที่ใช้บ่อยที่สุดจะถอดรหัสเนื้อหาเป็น String โดยใช้ชุดอักขระจากการตอบกลับ และใช้ UTF-8 เป็นค่าเริ่มต้น ประเภทของการตอบกลับคือ 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

สำหรับเนื้อหาไบนารี เช่น รูปภาพ ให้ใช้ ofByteArray() ประเภทของเนื้อหาจะกลายเป็น byte[] ซึ่งคุณสามารถเขียนลงดิสก์หรือถอดรหัสด้วยตนเองได้

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) จะส่งการตอบกลับแบบสตรีมลงดิสก์โดยตรง และมอบ HttpResponse<Path> ให้คุณ วิธีนี้หลีกเลี่ยงการเก็บข้อมูลดาวน์โหลดขนาดใหญ่ไว้ในหน่วยความจำ

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

เมื่อคุณสนใจเฉพาะสถานะและส่วนหัว discarding() จะทิ้งเนื้อหาและสร้าง HttpResponse<Void> วิธีนี้ช่วยหลีกเลี่ยงต้นทุนในการเก็บข้อมูลไว้ชั่วคราว

การตรวจสอบความสำเร็จ

ฟังก์ชันช่วยทั่วไปจะตรวจสอบว่าสถานะอยู่ในช่วง 2xx หรือไม่ ก่อนที่จะเชื่อถือเนื้อหา

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));
    }
}

การตอบสนองตามหมวดหมู่สถานะ

ใช้ตัวเลขหลักแรกเป็นเงื่อนไขเพื่อแยกการทำงานสำหรับความสำเร็จ การเปลี่ยนเส้นทาง และข้อผิดพลาด

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));
    }
}

การจับคู่เนื้อหาด้วย mapping

BodyHandlers.mapping(upstream, fn) จะห่อตัวจัดการอื่นและแปลงผลลัพธ์ของตัวจัดการนั้น ตัวอย่างเช่น แยกวิเคราะห์เนื้อหาสตริงเป็นความยาวชนิดจำนวนเต็มทั้งหมดภายในตัวจัดการ

การอ่านส่วนหัวที่ระบุ

หากต้องการอ่านค่าของส่วนหัวการตอบกลับ ให้ใช้ headers().firstValue(name) ซึ่งส่งคืน Optional<String> หากต้องการค่าทั้งหมดของส่วนหัวที่ปรากฏซ้ำ ให้ใช้ 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);
    }
}

การเลือกตัวจัดการ

  • ofString — API ที่ใช้ข้อความและ JSON
  • ofByteArray — ข้อมูลไบนารีขนาดเล็กที่เก็บอยู่ในหน่วยความจำ
  • ofFile — การดาวน์โหลดขนาดใหญ่ที่ส่งแบบสตรีมลงดิสก์
  • ofInputStream — ประมวลผลเนื้อหาเป็นสตรีม
  • discarding — คำขอที่ต้องการเฉพาะสถานะ

ตรวจสอบความเข้าใจอย่างรวดเร็ว

ทดสอบความเข้าใจของคุณเกี่ยวกับการจัดการการตอบกลับ

สรุปทบทวน

คุณได้เรียนรู้การตีความการตอบกลับ HTTP ดังนี้:

  • HttpResponse เปิดให้เข้าถึง statusCode(), body() และ headers()
  • BodyHandler จะกำหนดชนิดของเนื้อหา: String, อาร์เรย์ไบต์, เส้นทาง, ค่าว่าง หรือสตรีม
  • ใช้ ofFile สำหรับการดาวน์โหลดขนาดใหญ่ เพื่อหลีกเลี่ยงการใช้หน่วยความจำมากเกินไป
  • จัดประเภทสถานะตามเลขหลักแรก และตรวจสอบช่วง 2xx เพื่อยืนยันความสำเร็จ
  • อ่านส่วนหัวด้วย firstValue / allValues

คำถามที่พบบ่อย

บทเรียน “การจัดการการตอบกลับ” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การจัดการการตอบกลับ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Java Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Java Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การจัดการการตอบกลับ”

BodyHandlers และรหัสสถานะ คุณปฏิบัติ Java Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Java Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Java Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน

บทเรียน “การจัดการการตอบกลับ” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Java Academy นี้ได้ไหม

ได้ บทเรียน Java Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. java.net.http.HttpClient
  2. คำขอแบบอะซิงโครนัส
  3. เนื้อหาและส่วนหัวของคำขอ
  4. การจัดการการตอบกลับ
← กลับไปที่ Java Academy