代码为401时如何在okhttp中获取响应正文 [英] how to get response body in okhttp when code is 401

查看:744
本文介绍了代码为401时如何在okhttp中获取响应正文的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用okHttp 3.2.0,这是构建请求对象的代码

i am using okHttp 3.2.0 and here is code for building request object

MediaType JSON = MediaType.parse(AppConstants.CONTENT_TYPE_VALUE_JSON);
RequestBody body = RequestBody.create(JSON, requestBody);


    HttpUrl url = new HttpUrl.Builder()
                                    .scheme("http")
                                    .host("192.168.0.104")
                                    .port(8080)
                                    .addPathSegment("mutterfly-server")
                                    .addPathSegment("j_spring_security_check")
                                    .addQueryParameter("j_username", jsonObject.getString("emailId"))
                                    .addQueryParameter("j_password", jsonObject.getString("password"))
                                    .build();

     request = new Request.Builder()
                                    .addHeader(AppConstants.CONTENT_TYPE_LABEL, AppConstants.CONTENT_TYPE_VALUE_JSON)
                                    .addHeader(AppConstants.ACCEPT_LABEL, AppConstants.CONTENT_TYPE_VALUE_JSON)
                                    .url(url)
                                    .post(body)
                                    .build();

这是我解析响应的方式

client.newCall(request).enqueue(new Callback() {
                @Override
                public void onFailure(Call call, IOException e) {

                }

                @Override
                public void onResponse(Call call, final Response response) throws IOException {

                    String respBody;
                    if (response.isSuccessful()) {
                        if (response.body() != null) {
                            respBody = response.body().string();
                            Log.i(TAG, respBody);
                            response.body().close();
                            if (AppMethods.checkIfNull(loginParserListener)) {
                                try {
                                    final VUser user = AppMethods.getGsonInstance().fromJson(respBody, VUser.class);
                                } catch (Exception e) {

                                }
                            }
                        }
                    } else {

                        switch (response.code()){
                            case 401:
                                String body="HTTP_UNAUTHORIZED";
                                break;
                        }
                    }
                }
            });

这是身份验证失败时的理想响应(来自Web Rest客户端).

This is the ideal response(from web rest client) when authentication is failed.

{"msgDesc":"The username or password you entered is incorrect..","statusCode":401}

response.toString()返回

Response{protocol=http/1.1, code=401, message=Unauthorized, url=http://192.168.0.104:8080/mutterfly-server/j_spring_security_check?j_username=s@s.s&j_password=1}

response.body().toString()返回

okhttp3.internal.http.RealResponseBody@528ae030

我想获取响应正文中的"msgDesc".有什么方法可以返回这个字符串吗?

i want to fetch the 'msgDesc' which is in response body. is there any method which will return this string?

推荐答案

尝试一下:

switch (response.code()){
        case 401:
           JsonObject object=new JsonObject(response.body().string());
           String body=object.getString("msgDesc");
           break;
}

这篇关于代码为401时如何在okhttp中获取响应正文的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆