前言
在Java开发中,处理JSON数据是常见的任务之一。Fastjson2作为阿里巴巴开源的一个JSON处理库,提供了强大的序列化和反序列化功能。然而,当遇到多层泛型结构时,正确地反序列化这些结构可能会遇到一些挑战。本文将详细介绍如何使用Fastjson2处理包含多层泛型的实体类。
问题描述
在调用HTTP接口并使用httpUtill工具类时,返回的数据通常是JSON字符串。如果接口返回的是一个包含多层泛型的实体类,如Result<Page>,
当使用
JSON.parseObject("res",new TypeReference<`Result<Page<UserDto>>>{
})
发现在page中存在的records变成了 jsonObject 而没用到实际的泛型 导致jsonObject 对象反序列化为UserDto 对象报错
解决方案
升级fastjson2版本
比较简单的方案是 升级fastjson版本为 2.0.51 以上 另外需要自行测试 其他的兼容性
参见: https://github.com/alibaba/fastjson2/releases/tag/2.0.51
使用TypeReference保留泛型信息:
Fastjson2在反序列化时默认无法获取泛型信息,因为Java的泛型信息在编译期间会被擦除。为了保留泛型信息,可以使用TypeReference。
TypeReference<Result<Page<UserDto>>> typeRef = new TypeReference<Result<Page<UserDto>>>() {
};
Result<Page<UserDto>> result = JSON.parseObject(jsonString, typeRef.getType(