问题描述:
前后台交互式,接口返回json字符串:
{"data":{"result":"数据"},"code":1,"message":"success"}
其中,data的value会有各种不同的属性(java对象),前端要json转为对应的java对象。
解决:
定义一个接收返回数据的类Response.java,与后台统一:
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Response<T> {
private T data;
private int code;
private String message;
}
定义一个具体的数据类Data.java,模拟数据
@lombok.Data
@AllArgsConstructor
public class Data {
private String result;
}
定义入口类和方法DemoMain.java,模拟返回数据
public class DemoMain {
public static void main(String[] args) {
Data data = new Data("数据");
Response<Data> dataResponse = new Response<>(data,1,"success");
Gson gson = new Gson();
String json = gson.toJson(dataResponse);
System.out.println(json);
}
}
运行程序,输出:
{"data":{"result":"数据"},"code":1,"message":"success"}
现在的需求是:将上述字符串转为Response<Data> 对象,定义TypeReference.java
@Data
public class TypeReference<T> {
Type type;
public TypeReference(){
//获得泛型类型
Class<? extends TypeReference> clazz = getClass();
Type genericSuperclass = clazz.getGenericSuperclass();
ParameterizedType parameterizedType = (ParameterizedType) genericSuperclass;
//因为类泛型可以定义多个A<T,E,U>所以是个数组
Type[] actualTypeArguments = parameterizedType.getActualTypeArguments();
type = actualTypeArguments[0];
}
}
main方法增加代码
TypeReference<Response<Data>> typeReference = new TypeReference<Response<Data>>() {
};
Type type = typeReference.getType();
Response<Data> response = gson.fromJson(json, type);
System.out.println(response);
运行,输出:
Response(data=Data(result=数据), code=1, message=success)
完成!!!
网友评论