okhttp get failure response

☆樱花仙子☆ 提交于 2020-04-09 18:27:37

问题


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());
                             }
                         }
                     });
    }

Here's my response in case of failure.


回答1:


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");



回答2:


if you are trying to get (okhttp3.ResponseBody) errorResponse from Retrofit response do this..

                // 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();
                        }
                     }
                }


来源:https://stackoverflow.com/questions/39218744/okhttp-get-failure-response

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!