I've implemented okhttp in my android client for network calls.
When i get a failure response i get the failure code and the text related to the code as a message but i don't get the custom failure response that the server sends me. In my failure response in the implemented code the message i get is just "Bad Request".
Whereas the same response from the browser is as follows.
How do i get the error message the server is giving me back?
My code
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());
}
}
});
}
答案 0 :(得分:5)
You will have to catch error response by body()
because response.message()
returns HTTP status message.
In the screen shot provided by you:
Status is broken down in OkHttp
like response.code()
for HTTP status code which is 400
in your case and response.message()
for HTTP status message which is Bad Request
in your case.
The body of the response (be it success or failure) is response.body()
. And if you want to get it as a String
, then call 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);
}
}
As per comments:
Since you want to read Message
object from the response, try to do like this:
JSONObject = new JSONObject (response.body().string());
String messageString =object.getString("Message");
答案 1 :(得分:0)
如果您尝试从翻新响应中获取(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().string());
} catch (IOException e) {
e.printStackTrace();
}
}
}