fastjson泛型T反序列化
当fastjson反序列化时,如果目标对象中包含了泛型,默认会将泛型类转换为JSONObject,获取数据时会报错类型转换错误
java.lang.ClassCastException: com.alibaba.fastjson.JSONObject cannot be cast to org.gyx.sbmweb.test.UserInfo
此时,我们转换时使用TypeReference
Resp1<UserInfo> resp1 = JSONObject.parseObject(json, new TypeReference<Resp1<UserInfo>>(){});
这样可以解决一时的问题,但是如果这个泛型我们以Class tClass 方式传进来了,我们就需要给TypeReference参数
private static <T> Resp1<T> getResp(Resp resp, Class<T> tClass){
String json = JSON.toJSONString(resp);
Resp1<T> resp1 = JSONObject.parseObject(json, new TypeReference<Resp1<T>>(tClass){});
return resp1;
}
完整代码
public class FastJsonTest {
public static void main(String[] args) {
String json = "{\"data\":{\"data\":[{\"code\":\"1234\",\"name\":\"xiaogao\"}]},\"msg\":\"成功\",\"status\":\"OK\"}";
Resp1<UserInfo> resp1 = getResp(json, UserInfo.class);
List<UserInfo> data = resp1.getData().getData();
for (UserInfo info : data) {
System.out.println(info);
}
}
private static <T> Resp1<T> getResp(String json, Class<T> tClass){
Resp1<T> resp1 = JSONObject.parseObject(json, new TypeReference<Resp1<T>>(tClass){});
return resp1;
}
}
@Data
class UserInfo{
private String code;
private String name;
}
@Data
class Resp1<T>{
private String status;
private String msg;
private RespBody1<T> data;
}
@Data
class RespBody1<T>{
private List<T> data;
}
如有问题,欢迎指正