改造 - 获取字符串中的响应错误

时间:2015-12-27 13:11:23

标签: android rest http bad-request retrofit2

我正在使用改造来使用我的REST api。

我不断从服务器获取400 bad request,我无法将错误解析为字符串。

当我尝试从 POSTMAN Chrome应用程序发布POST时,请求成功,我得到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()中看到错误字符串,但它是一个空字符串。< / p>

任何想法??

1 个答案:

答案 0 :(得分: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是一个代表JSON的pojo:

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