2

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

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

当我尝试从POSTMAN chrome 应用程序发布时,请求成功并且我得到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(),但它是一个空字符串。

有任何想法吗??

4

1 回答 1

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."
}
于 2015-12-30T17:30:53.440 回答