2

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()が、空の文字列です。

何か案は??

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 に答える