Java 改型2-获取错误对象JSON(相同请求的POJO很少)
我有一个简单的要求,比如Java 改型2-获取错误对象JSON(相同请求的POJO很少),java,android,json,retrofit,Java,Android,Json,Retrofit,我有一个简单的要求,比如 /*LOGIN*/ @FormUrlEncoded @POST("v1/user/login") //your login function in your api Call<LoginResponce> login(@Field("identity") String identity, @Field("password") String password); 或者错误Jso
/*LOGIN*/
@FormUrlEncoded
@POST("v1/user/login") //your login function in your api
Call<LoginResponce> login(@Field("identity") String identity,
@Field("password") String password);
或者错误Json,描述了如果出现错误时的确切错误
{"status":4,"description":"user provided token expired"}
如何处理响应中的错误状态
我试过了,但在原始文本中看不到JSON(不起作用)。这似乎不是个好办法
mCallLoginResponse.enqueue(new Callback<LoginResponce>() {
@Override
public void onResponse(Response<LoginResponce> response, Retrofit retrofit) {
if (response.isSuccess()) {
registerWithToken(response.body().getToken());
} else { //some error in responce
Gson gson = new GsonBuilder().create();
ApiError mApiError = gson.fromJson(response.raw().body().toString(),
ApiError.class); //Exception here - no JSON in String
//todo error handling
}
}
mCallLoginResponse.enqueue(新回调(){
@凌驾
公共响应(响应、改装){
if(response.issucess()){
registerWithToken(response.body().getToken());
}else{//响应中有错误
Gson Gson=new GsonBuilder().create();
APIRROR MAPIRROR=gson.fromJson(response.raw().body().toString(),
apirerror.class);//此处出现异常-字符串中没有JSON
//todo错误处理
}
}
若要在出现错误代码时访问响应正文,请使用而不是body()
。此外,在ResponseBody
上有一个string
方法,您应该使用它来代替toString
Gson gson = new GsonBuilder().create();
try {
ApiError mApiError = gson.fromJson(response.errorBody().string(),ApiError.class);
} catch (IOException e) {
// handle failure to read error
}
这会引发IOException.Why?response.errorBody().toString()异常不起作用。我希望它返回响应的原始字符串。是的,
string
可以抛出一个IOException
,因为主体正在流式处理。当调用string
时,响应从网络中读取。这是否意味着在非200代码的情况下,改装不会读取主体?我如何从asyn主体的网络中读取响应chronius网络调用?据我所知,在网络连接完成后执行“onResponse”回调。因此,如果改型将发送新请求,这意味着我无法设置“onResponse”在UI线程中,我现在这样做了。这是一个值得关注的问题。深入研究它,您不需要担心主线程上的网络——改型将网络响应读取到缓冲区中,并从缓冲区将其流式传输给您。
Gson gson = new GsonBuilder().create();
try {
ApiError mApiError = gson.fromJson(response.errorBody().string(),ApiError.class);
} catch (IOException e) {
// handle failure to read error
}