модификация - получить ошибку ответа в строке

Я использую модификацию, чтобы использовать REST API.

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

Когда я попытался выполнить POST из приложения chrome 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("/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(), но это пустая строка.

Любые идеи??


person Ofek Agmon    schedule 27.12.2015    source источник


Ответы (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."
}
person Vishal Raj    schedule 30.12.2015