滨江网站开发中山那些网站公司
滨江网站开发,中山那些网站公司,网站由谁备案,新品发布会是什么意思解决 Java 中使用 Alibaba Fastjson 解析泛型类型 JsonResultSysUserDTO 的问题。核心问题由于 Java 的类型擦除机制#xff0c;直接解析泛型类会丢失泛型参数信息#xff0c;导致 SysUserDTO 无法正确反序列化。解决方案方案一#xff1a;使用 TypeReference#…解决 Java 中使用 Alibaba Fastjson 解析泛型类型JsonResultSysUserDTO的问题。核心问题由于 Java 的类型擦除机制直接解析泛型类会丢失泛型参数信息导致SysUserDTO无法正确反序列化。解决方案方案一使用TypeReference推荐java复制import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.TypeReference; String jsonStr {\code\:200,\data\:{\userId\:1,\username\:\admin\},\message\:\success\}; // 关键使用 TypeReference 保留泛型信息 JsonResultSysUserDTO result JSON.parseObject(jsonStr, new TypeReferenceJsonResultSysUserDTO() {}); SysUserDTO user result.getData();方案二使用Type对象java复制import com.alibaba.fastjson.JSON; import java.lang.reflect.Type; // 构建带泛型的 Type Type resultType new com.alibaba.fastjson.TypeReferenceJsonResultSysUserDTO() {}.getType(); JsonResultSysUserDTO result JSON.parseObject(jsonStr, resultType);方案三先解析为 JSONObject再转换java复制import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; // 先解析外层 JsonResult result JSON.parseObject(jsonStr, JsonResult.class); // 手动转换 data 字段 Object dataObj result.getData(); SysUserDTO user JSON.parseObject(JSON.toJSONString(dataObj), SysUserDTO.class);方案四使用 Fastjson2新版 API如果你使用的是 Fastjson2java复制import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.TypeReference; JsonResultSysUserDTO result JSON.parseObject(jsonStr, new TypeReferenceJsonResultSysUserDTO() {});完整示例java复制import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.TypeReference; public class JsonDemo { public static void main(String[] args) { String json {\n \code\: 200,\n \message\: \操作成功\,\n \data\: {\n \userId\: 1001,\n \username\: \zhangsan\,\n \email\: \zhangsanexample.com\\n }\n }; // ✅ 正确做法 JsonResultSysUserDTO result JSON.parseObject(json, new TypeReferenceJsonResultSysUserDTO() {}); System.out.println(Code: result.getCode()); System.out.println(User: result.getData().getUsername()); } } // 定义类 Data public class JsonResultT { private Integer code; private String message; private T data; } Data public class SysUserDTO { private Long userId; private String username; private String email; }常见错误 ❌java复制// 错误会导致 data 被解析为 LinkedHashMap JsonResultSysUserDTO result JSON.parseObject(jsonStr, JsonResult.class);依赖配置xml复制!-- Fastjson 1.x -- dependency groupIdcom.alibaba/groupId artifactIdfastjson/artifactId version1.2.83/version /dependency !-- Fastjson2 -- dependency groupIdcom.alibaba.fastjson2/groupId artifactIdfastjson2/artifactId version2.0.43/version /dependency总结表格复制方案适用场景推荐度TypeReference大多数场景⭐⭐⭐Type对象需要动态构建类型时⭐⭐⭐分步转换兼容旧代码或特殊需求⭐⭐Fastjson2新项目⭐⭐⭐核心要点解析带泛型的类时必须使用TypeReference来保留完整的泛型信息否则 Fastjson 无法知道T具体是什么类型。