2015-12-27 5 views
2

Я использую модификацию для использования моего REST api.retrofit - получить ответную ошибку в строке

Я продолжаю получать 400 bad request с моего сервера, и я не могу разобрать ошибку в строке.

Когда я попытался установить POST с POSTMAN хром приложение, запрос успешно, и я получаю 201 created ответ (новый пользователь).

вот моя зависимость:

compile 'com.google.code.gson:gson:2.4' 
compile 'com.squareup.retrofit:retrofit:2.0.0-beta2' 
compile 'com.squareup.retrofit:converter-gson:2.0.0-beta2' 
compile 'com.squareup.okhttp:okhttp:2.7.0' 

вот мой интерфейс:

public interface PingMeApi { 

    @Headers({"Content-Type: application/json", "Accept: text/html"}) 
    @POST("https://stackoverflow.com/users/") 
    Call<User> createUser(@Body User user); 

} 

вот мой запрос POST:

Call<User> call = pingMeApplication.apiService.createUser(user); 
call.enqueue(new Callback<User>() { 
    @Override 
    public void onResponse(Response<User> response, Retrofit retrofit) { 
     /// How can I parse the response here???? 

     String result; 
     try { 
      result = response.errorBody().string(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

    @Override 
    public void onFailure(Throwable t) { 


    } 
} 

Я не могу разобрать ответ на onResponse, поэтому я не могу понять, что это за ошибка.

это говорит о Документах - http://inthecheesefactory.com/blog/retrofit-2.0/en, что если я получаю и ошибка, onResponse будет называться и я могу видеть строку ошибки в response.errorBody().string(), но пустая строка.

любые идеи?

ответ

1
@Override 
public void onResponse(Response<User> response, Retrofit retrofit) { 
    if (response.isSuccess()) { 
     User user = response.body; 
     Log.e("User name", user.getName()); // do whatever you want 
    }else{ 
     Converter<GlobalErrorObject> converter = 
         (Converter<GlobalErrorObject>) GsonConverterFactory.create().get(GlobalErrorObject.class); 
       try { 
        GlobalErrorObject globalErrorObject = converter.fromBody(response.errorBody()); 
        Log.e("Error", globalErrorObject.getErrorMessage()); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 

    } 
} 

** В моем случае GlobalErrorObject является POJO, представляющий JSON как:

{ 
    "errorCode": "API_INVALID_TOKEN", 
    "errorType": "API_ERROR", 
    "errorMessage": "Valid API Token required." 
} 

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

  • Нет связанных вопросов^_^