package com.mcxtzhang.rxjava2demo.retrofit.base.gson;
import android.util.Log;
import com.google.gson.Gson;
import com.google.gson.internal.$Gson$Types;
import com.mcxtzhang.rxjava2demo.retrofit.base.ResultException;
import com.mcxtzhang.rxjava2demo.retrofit.base.wrapper.BaseBean;
import java.io.IOException;
import java.lang.reflect.Type;
import okhttp3.ResponseBody;
import retrofit2.Converter;
/**
* 注册一个自定义的转换类GsonResponseBodyConverter
* 这个类会自动将 flag msg 都剥离掉
*
* @param <T>
*/
class GsonEntityResponseBodyConverter<T> implements Converter<ResponseBody, T> {
private final Gson gson;
private final Type type;
GsonEntityResponseBodyConverter(Gson gson, Type type) {
this.gson = gson;
this.type = type;
}
@Override
public T convert(ResponseBody value) throws IOException {
String response = value.string();
Type BaseBeanTtype = $Gson$Types.newParameterizedTypeWithOwner(null, BaseBean.class, type);
BaseBean result = gson.fromJson(response, BaseBeanTtype);
Log.d("TAG", "GsonEntityResponseBodyConverter convert response>>" + response + " T" + "BaseBean result:" + result);
if ("1".equals(result.getFlag())) {
//result==0表示成功返回,继续用本来的Model类解析
//return gson.fromJson(response, type);
//剥离无用字段
T data = (T) result.getData();
return data;
} else {
//ErrResponse 将msg解析为异常消息文本
/* ErrResponse errResponse = gson.fromJson(response, ErrResponse.class);*/
throw new ResultException(result.getFlag(), result.getMessage());
}
}
}