okhttp获得失败响应

ViV*_*ekH 8 android okhttp okhttp3

我在我的android客户端中实现了okhttp用于网络调用.

当我得到失败响应时,我得到失败代码和与代码相关的文本作为消息,但我没有得到服务器发送给我的自定义失败响应.在我实现的代码中的失败响应中,我得到的消息只是"错误请求".

而浏览器的相同响应如下. 在此输入图像描述

我如何得到服务器给我回复的错误消息?

我的代码

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());
                             }
                         }
                     });
    }
Run Code Online (Sandbox Code Playgroud)

这是我失败时的回应. 在此输入图像描述

Roh*_*rya 11

您将必须捕获错误响应,body()因为response.message()返回HTTP状态消息.

在您提供的屏幕截图中:

状态是在细分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);
     }
}
Run Code Online (Sandbox Code Playgroud)

根据评论:

由于您想Message从响应中读取对象,请尝试这样做:

JSONObject = new JSONObject (response.body().string());
String messageString =object.getString("Message");
Run Code Online (Sandbox Code Playgroud)

  • response.body.string() 返回类似这样的内容 okhttp3.internal.http.RealResponseBody@528ae030 (2认同)