我正在使用Retrofit和Gson从REST服务中获取数据。它完美无缺,但只有当API没有返回错误时。通常,API返回对象列表(如json),但是当发生错误时,API返回单个错误对象。
我正在尝试获取Call<List<Link>>
,但是当API错误发生时,我收到Gson解析错误(Expected BEGIN_OBJECT but was BEGIN_ARRAY
)。
我只有一个解决方案:检索单个字符串,然后在enqueue的onResponse()
尝试解析响应,但这里有很多样板代码。
有没有更好的解决方案?如何处理API的错误?
答案 0 :(得分:0)
您可以使用下一个构造:
@Override
public void onResponse(Call<YourModel> call, Response<YourModel> response) {
if (response.isSuccessful()) {
// Do awesome stuff
} else if (response.code == 401) {
// Handle unauthorized
} else {
// Handle other responses
}
}
完整答案:How to get Retrofit success responce status codes
修改强>
对于您的情况,您可以使用Call<JsonElement>
作为响应类型并在Response:
call.enqueue(new Callback<JsonElement>() {
@Override
public void onResponse(Call<JsonElement> call, Response<JsonElement> response) {
if(response.isSuccessful()){
JsonElement jsonElement = response.body();
if(jsonElement.isJsonObject()){
JsonObject objectWhichYouNeed = jsonElement.getAsJsonObject();
}
// or you can use jsonElement.getAsJsonArray() method
//use any json deserializer to convert to your class.
}
else{
System.out.println(response.message());
}
}
@Override
public void onFailure(Call<JsonElement> call, Throwable t) {
System.out.println("Failed");
}
});