我正在使用改造来使用我的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>
任何想法??
答案 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."
}