在上篇文章里已经讲解过Gson的基本操作,这应该算是一个简易的基础入门吧。接下来,我们要尝试着如何自定义的去实现我们需要的序列化与反序列化操作。在讲解技术之前,先谈谈我们为什么需要去实现自定义的序列化与反序列化。说起这个为什么,其实说白了就一句话“不是所有前端想要的数据,你的后端都愿意给”,当然,你有个非常靠谱又非常乐于助人的后端除外,或者说,你是一个还算有姿色女程序员。如果这两者你都不是,我觉得,学会自定义序列化与反序列化是真的很有必要的。
在移动开发中,后端给的数据基本上如下格式
public class HttpResponse<T> {
int code;
String message;
T data;
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
}
code返回码,message返回说明,data返回的数据,这里用了一个泛型,因为每个接口返回的数据格式是不同的。前端这样封装返回数据对象感觉是合理可靠的。按照正常的业务逻辑,如果接口访问成功,data返回正确的数据,如果接口访问失败(参数错误或者其他原因)data返回空值null,这种“友好的情况”下,Gson框架是可以成功的帮我们解析数据的。但是,但是,但是,这种情况的概率是非常非常低的,即使你一再的跟你的后端强调一定要这样做。更多的情况下,在接口访问成功的情况下,后端给你返回的数据类型是A,在接口访问失败的情况下,后端返回的数据类型是B。这种情况就问你气不气?改是不可能改的,这辈子都不可能改的,前端自己适配去吧。在产业链上游的都是大爷。我们模拟一下这种情况吧。
假设前端需要用到用户数据,调用接口向后端请求,正常情况下返回用户对象如下如下
public class UserBean {
String name;
int age;
boolean flage;
public UserBean(String name, int age, boolean flage) {
this.name = name;
this.age = age;
this.flage = flage;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name