2016-04-26 2 views
5

я использую okHttp 3.2.0 и вот код для создания запроса объектакак получить тело ответа в okhttp когда код 401

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

Это идеальный ответ (от клиента веб-клиента), когда аутентификация не удалась.

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

EDIT:

response.toString() возвращает

Response{protocol=http/1.1, code=401, message=Unauthorized, url=http://192.168.0.104:8080/mutterfly-server/[email protected]&j_password=1} 

response.body().toString() возвращает

[email protected] 

я хочу принести 'msgDesc', который находится в теле ответа. есть ли какой-либо метод, который вернет эту строку?

ответ

5

Попробуйте это:

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

response.toString() возвращает Response {protocol = http/1.1, code = 401 , message = Unauthorized, url = http: //192.168.0.104: 8080/mutterfly-server/j_spring_security_check? [email protected]&j_password=1} –

+0

Проверьте обновленный ответ –

+0

спасибо за ответ, но я отредактировал сообщение с ответ от ответа –

-1

401 средства permission denied.

Проверьте правильность вашего token или user/password.

+1

нет маркера генерироваться как я пытаюсь войти в систему пользователя. и более того, я хочу проверить случай, когда пользователь вводит неправильные учетные данные, поэтому я могу уведомить пользователя о «msgDesc», полученном с сервера. –

3

Это довольно странно, но площадь, компания за OkHttp, решила не использовать «ToString()», но «строку()» в качестве метода для получения тела в виде строки ,

Так что это работает;

String string = response.body().string(); 
//convert to JSON and get your value 

Но это вовсе не так:

String string = response.body().toString(); 
+1

да, это странно. –

Смежные вопросы