การจัดการการตอบกลับ
BodyHandlers และรหัสสถานะ
การจัดการการตอบกลับ เป็นบทเรียน Java Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Java Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Java Academy มีบทเรียนทั้งหมด 4 บทเรียน
การจัดการการตอบกลับ
ทุกการเรียกใช้ไคลเอนต์ HTTP จะส่งคืน HttpResponse<T> ประเภททั่วไป T จะถูกกำหนดโดย BodyHandler ที่คุณส่งให้ บทเรียนนี้จะสำรวจตัวจัดการที่มีให้ใช้และวิธีตีความรหัสสถานะ
API ของ HttpResponse
เมธอดสำคัญใน HttpResponse:
statusCode()— สถานะชนิด intbody()— เนื้อหาที่ถอดรหัสแล้ว ซึ่งมีประเภทเป็นTheaders()— ส่วนหัวการตอบกลับ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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- java.net.http.HttpClient
- คำขอแบบอะซิงโครนัส
- เนื้อหาและส่วนหัวของคำขอ
- การจัดการการตอบกลับ