للحصول على جسم الرد في حالة حدوث خطأ 400 Bad Request باستخدام Retrofit 2.0، يمكنك استخدام مكتبة OkHttp المستخدمة كعميل HTTP الخلفي لـ Retrofit. في مثالك، يتم تجاهل الرد الذي يحتوي على جسم JSON في طريقة onFailure() بسبب استثناء IOException الذي يتم طرحه. لحل هذه المشكلة والحصول على الجسم، يمكنك معالجة الرد في طريقة onResponse() باستخدام response.errorBody()
للحصول على الجسم كـ ResponseBody. يمكنك ثم استخدام responseBody.string()
لتحويل الجسم إلى سلسلة نصية JSON قابلة للقراءة. إليك كيفية تعديل كودك:
javaCall.enqueue(new Callback() {
@Override
public void onResponse(Call call, Response response) {
if (response.isSuccessful()) {
// Handle successful response
} else {
// Handle error response
try {
String errorBody = response.errorBody().string();
// Now you have the JSON error body as a string
// You can parse it or handle it as needed
} catch (IOException e) {
e.printStackTrace();
}
}
}
@Override
public void onFailure(Call call, Throwable t) {
// Handle failure
}
});
باستخدام هذا التعديل، ستتمكن من الوصول إلى جسم الرد في حالة حدوث خطأ 400 Bad Request ومعالجته كنص JSON قابل للقراءة.
المزيد من المعلومات
إضافةً إلى الحصول على جسم الرد في حالة حدوث خطأ 400 Bad Request، يمكنك أيضًا الوصول إلى رمز الخطأ المحدد المرتبط بالرد. في مثالك، يمكنك استخدام response.code()
للحصول على رمز الحالة HTTP الذي يمثل الخطأ. على سبيل المثال، إذا كنت ترغب في معالجة حالة 400 Bad Request بشكل مختلف عن الأخطاء الأخرى، يمكنك فعل ذلك على النحو التالي:
java@Override
public void onResponse(Call call, Response response) {
if (response.isSuccessful()) {
// Handle successful response
} else {
if (response.code() == 400) {
// Handle 400 Bad Request error
try {
String errorBody = response.errorBody().string();
// Now you have the JSON error body as a string
// You can parse it or handle it as needed
} catch (IOException e) {
e.printStackTrace();
}
} else {
// Handle other errors
}
}
}
بهذه الطريقة، يمكنك تحديد نوع الخطأ باستخدام رمز الحالة HTTP ومعالجته بشكل مختلف وفقًا لاحتياجات تطبيقك.