購(gòu)物網(wǎng)站如何做性能測(cè)試上海百度競(jìng)價(jià)
前言
由于使用到httpUtill來(lái)調(diào)用接口 工具類的返回是字符串
其中接口的實(shí)現(xiàn)返回值是個(gè)多層泛型結(jié)構(gòu)的實(shí)體類 例如Result<Page<UserDto>>
當(dāng)使用
JSON.parseObject("res",new TypeReference<`Result<Page<UserDto>>>{})
發(fā)現(xiàn)在page中存在的records變成了 jsonObject 而沒(méi)用到實(shí)際的泛型
解決
- 保證泛型信息的存在 通過(guò)使用如下兩種方式
astjson2默認(rèn)情況下無(wú)法獲取泛型信息,因?yàn)樵诰幾g期間泛型信息會(huì)被擦除。因此,需要通過(guò)一些方式來(lái)保留泛型信息,例如使用@Type注解或者TypeReference。 - 使用TypeReference
TypeReference<Result<Page<UserDto>>> typeRef = new TypeReference<Result<Page<UserDto>>>() {};
Result<Page<UserDto>> result = JSON.parseObject(jsonString, typeRef.getType());
- 使用@Type注解 (有一定的局限性) 不一定適用所有場(chǎng)景
在實(shí)體類中使用@Type注解來(lái)指定泛型參數(shù)的具體類型,例如:
import com.alibaba.fastjson2.annotation.JSONField;
import com.alibaba.fastjson2.annotation.JSONType;@JSONType(orders = {@JSONType.Order(name = "result"), @JSONType.Order(name = "data")})
public class Result<T> {@JSONField(ordinal = 1)private T result;@JSONField(ordinal = 2)private T data;// 構(gòu)造函數(shù)、getter、setter...
}@JSONType(typeKey = "type", orders = {@JSONType.Order(name = "pageList"), @JSONType.Order(name = "total")})
public class Page<T> {@JSONField(ordinal = 1)private List<T> pageList;@JSONField(ordinal = 2)private long total;// 構(gòu)造函數(shù)、getter、setter...
}public class UserDto {// 字段...
}