问题:JSON.parseObject()方法将String类型的JSON字符串转为某个类的对象时,发现转换后对象一直是null,后来发现对象的类是抽象类。
查阅资料后发现,json转Object是反序列化,而抽象类不能反序列化。
/**
* 抽象类
*/
public abstract class ReturnBean<T> {
/**
* 状态码
*/
private Integer code;
/**
* 返回信息
*/
private String message;
/**
* 返回结果
*/
private List<T> result;
}
使用如下代码进行JSON字符串解析时,发现testJson字符串不为空,但返回值returnBean 是null:
ReturnBean<String> returnBean = JSON.parseObject(testJson, new TypeReference<ReturnBean<String>>(){});
解决方法是去掉ReturnBean声明时的abstract关键字,或者重写一个方法继承ReturnBean。
class SubReturnBean<T> extends ReturnBean<T> {
}
TypeReference:
在使用fastJson时,对于泛型的反序列化很多场景下都会使用到TypeReference,使用TypeReference可以明确的指定反序列化的类型。