1.场景
后台接口某些情况会把某个key原本是Object对象变List返回。经常出现在对象为空的时候。理论上让接口处理,为了兼容老接口客户端也可以在解析的时候统一预处理下。
2.处理方案
自定义Gson类型适配器来处理对象结构变更处理,然后将自定的gson设置到Retrofit用到的GsonConverterFactory.create(gson)中即可
3.兼容案例
返回的w_userinfo字段在空的时候回变成[]集合返回,这个时候,客户端只需要将对应子对删除即可。这样的话,原先的通用解析方案都不用变更,只针对部分结构处理即可。
public class JsonCompat {
private static WorkFlowBean FLOWBEAN = new WorkFlowBean();
private static final Gson GSON = new Gson();
public Gson create() {
return new GsonBuilder().serializeNulls()
//自定义类型适配器
.registerTypeAdapter(WorkFlowBean.class, new WorkFlowBeanDefaultAdapter())
.create();
}
private class WorkFlowBeanDefaultAdapter implements JsonDeserializer<WorkFlowBean> {
@Override
public WorkFlowBean deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) {
try {
String error_1 = "w_userinfo";
JsonObject object = json.getAsJsonObject();
try {
object.getAsJsonObject(error_1);
} catch (JsonParseException e) {
//出现异常,将对应字段删除
object.remove(error_1);
}
return GSON.fromJson(object, WorkFlowBean.class);
} catch (Exception e) {
e.printStackTrace();
}
return FLOWBEAN;
}
}
}
网友评论