معالجة الاستجابات
BodyHandlers ورموز الحالة
معالجة الاستجابات درس مجاني في Java Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Java Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Java Academy 4 دروس في المجموع.
معالجة الاستجابات
يعيد كل استدعاء لعميل HTTP قيمة من النوع HttpResponse<T>. ويحدد BodyHandler الذي تمرره نوع T العام. يستكشف هذا الدرس المعالجات المتاحة وكيفية تفسير رموز الحالة.
واجهة 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 — واجهات النص وJSON البرمجية.
- ofByteArray — حمولات ثنائية صغيرة محفوظة في الذاكرة.
- ofFile — تنزيلات كبيرة تُدفق إلى القرص.
- ofInputStream — معالجة الجسم كتدفق.
- discarding — الطلبات التي تحتاج إلى الحالة فقط.
تحقق سريع
تحقّقوا من فهمكم لمعالجة الاستجابات.
مراجعة
تعلّمتم كيفية تفسير استجابات HTTP:
- يتيح HttpResponse الوصول إلى
statusCode()وbody()وheaders(). - يحدّد BodyHandler نوع جسم الاستجابة: String أو byte[] أو Path أو Void أو تدفّق.
- استخدموا
ofFileللتنزيلات الكبيرة لتجنّب الضغط على الذاكرة. - صنّفوا رموز الحالة حسب رقمها الأول، وتحقّقوا من النطاق 2xx لمعرفة نجاح العملية.
- اقرؤوا الترويسات باستخدام
firstValueوallValues.
الأسئلة الشائعة
هل درس «معالجة الاستجابات» مجاني؟
نعم — نص درس «معالجة الاستجابات» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Java Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Java Academy 4 دروس في المجموع.
ماذا ستتعلم في «معالجة الاستجابات»؟
BodyHandlers ورموز الحالة تتمرن على Java Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Java Academy؟
لا تُشترط خبرة سابقة. Java Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «معالجة الاستجابات»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Java Academy هذا؟
نعم. كل درس في Java Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.