首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当代码为401时,如何在okhttp中获得响应体?

当代码为401时,如何在okhttp中获得响应体?
EN

Stack Overflow用户
提问于 2016-04-26 06:25:18
回答 3查看 9.1K关注 0票数 11

我使用的是OkHttp 3.2.0,下面是构建请求对象的代码:

代码语言:javascript
运行
复制
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();

下面是我如何解析响应:

代码语言:javascript
运行
复制
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客户端)。

代码语言:javascript
运行
复制
{"msgDesc":"The username or password you entered is incorrect..","statusCode":401}

编辑:

response.toString()返回

代码语言:javascript
运行
复制
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()返回

代码语言:javascript
运行
复制
okhttp3.internal.http.RealResponseBody@528ae030

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

EN

Stack Overflow用户

发布于 2016-04-26 06:28:31

401的意思是permission denied

检查您的token是否有效或user/password是否正确。

票数 -1
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36856820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档