I have a webservice that returns either a list of serialized MyPOJO objects:
[
{ //JSON MyPOJO },
{ //JSON MyPOJO }
]
either an error object :
{
'error': 'foo',
'message':'bar'
}
Using retrofit2, how can I retrieve the error ?
Call<List<MyPOJO>> request = ...
request.enqueue(new Callback<List<MyPOJO>>() {
@Override
public void onResponse(Response<List<MyPOJO>> response) {
if (response.isSuccess()) {
List<MyPOJO> myList = response.body();
// do something with the list...
} else {
// server responded with an error, here is how we are supposed to retrieve it
ErrorResponse error = ErrorResponse.fromResponseBody(apiService.getRetrofitInstance(), response.errorBody());
processError(error);
// but we never get there because GSON deserialization throws an error !
}
}
@Override
public void onFailure(Throwable t) {
if(t instanceof IOException){
// network error
}else if(t instanceof IllegalStateException){
// on server sending an error object we get there
// how can I retrieve the error object ?
}else {
// default error handling
}
}
}
Here is the GSON exception:
java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $
Retrofit instance is created using GsonConverterFactory
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…