okhttp 获取失败响应
okhttp get failure response
我已经在我的 android 客户端中为网络调用实现了 okhttp。
当我收到失败响应时,我收到了失败代码和与代码相关的文本作为消息,但我没有收到服务器发送给我的自定义失败响应。
在我对已实现代码的失败响应中,我收到的消息只是 "Bad Request".
而来自浏览器的相同响应如下。
如何获取服务器返回给我的错误消息?
我的代码
private void executeCall(Request request, final ResponseListener listener) {
mOKHttpClient.newCall(request)
.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
postFailure(listener, (String) call.request()
.tag(),e.toString());
}
@Override
public void onResponse(Call call, final Response response) throws IOException {
if(response.isSuccessful()) {
String responseString = response.body().string();
postSuccess(listener, (String)call.request().tag(), responseString);
}
else {
postFailure(listener, (String)call.request().tag(),response.code()+","+response.message());
}
}
});
}
这是我在失败时的回应。
您必须通过 body()
捕获错误响应,因为 response.message()
returns HTTP 状态消息。
在您提供的屏幕截图中:
Status 在 OkHttp
中分解为 response.code()
HTTP 状态代码,在您的情况下为 400
和 response.message()
对于 HTTP 状态消息,在您的情况下是 Bad Request
。
响应的正文(成功或失败)是 response.body()
。如果你想把它作为 String
,然后调用 response.body().string()
.
@Override
public void onResponse(Call call, final Response response) throws IOException {
if(response.isSuccessful()) {
String responseString = response.body().string();
postSuccess(listener, (String)call.request().tag(), responseString);
}
else {
String errorBodyString = response.body().string();
postFailure(listener, (String)call.request().tag(),response.code()+","+errorBodyString);
}
}
根据评论:
既然您想从响应中读取 Message
对象,请尝试这样做:
JSONObject object = new JSONObject (response.body().string());
String messageString = object.getString("Message");
如果您正在尝试从 Retrofit 响应中获取 (okhttp3.ResponseBody) errorResponse,请执行此操作..
// Retrofit onResponseCall
@Override
public void onResponse(Call<MyResponse> call, Response<MyResponse> response) {
if (response.errorBody() != null) {
try {
Log.e("errorResponse","" + response.errorBody().toString());
} catch (IOException e) {
e.printStackTrace();
}
}
}
我已经在我的 android 客户端中为网络调用实现了 okhttp。
当我收到失败响应时,我收到了失败代码和与代码相关的文本作为消息,但我没有收到服务器发送给我的自定义失败响应。 在我对已实现代码的失败响应中,我收到的消息只是 "Bad Request".
而来自浏览器的相同响应如下。
如何获取服务器返回给我的错误消息?
我的代码
private void executeCall(Request request, final ResponseListener listener) {
mOKHttpClient.newCall(request)
.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
postFailure(listener, (String) call.request()
.tag(),e.toString());
}
@Override
public void onResponse(Call call, final Response response) throws IOException {
if(response.isSuccessful()) {
String responseString = response.body().string();
postSuccess(listener, (String)call.request().tag(), responseString);
}
else {
postFailure(listener, (String)call.request().tag(),response.code()+","+response.message());
}
}
});
}
这是我在失败时的回应。
您必须通过 body()
捕获错误响应,因为 response.message()
returns HTTP 状态消息。
在您提供的屏幕截图中:
Status 在 OkHttp
中分解为 response.code()
HTTP 状态代码,在您的情况下为 400
和 response.message()
对于 HTTP 状态消息,在您的情况下是 Bad Request
。
响应的正文(成功或失败)是 response.body()
。如果你想把它作为 String
,然后调用 response.body().string()
.
@Override
public void onResponse(Call call, final Response response) throws IOException {
if(response.isSuccessful()) {
String responseString = response.body().string();
postSuccess(listener, (String)call.request().tag(), responseString);
}
else {
String errorBodyString = response.body().string();
postFailure(listener, (String)call.request().tag(),response.code()+","+errorBodyString);
}
}
根据评论:
既然您想从响应中读取 Message
对象,请尝试这样做:
JSONObject object = new JSONObject (response.body().string());
String messageString = object.getString("Message");
如果您正在尝试从 Retrofit 响应中获取 (okhttp3.ResponseBody) errorResponse,请执行此操作..
// Retrofit onResponseCall
@Override
public void onResponse(Call<MyResponse> call, Response<MyResponse> response) {
if (response.errorBody() != null) {
try {
Log.e("errorResponse","" + response.errorBody().toString());
} catch (IOException e) {
e.printStackTrace();
}
}
}