news 2026/5/11 13:34:05

Java 中使用 Alibaba Fastjson 解析泛型类型 JsonResult<SysUserDTO> 的问题

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java 中使用 Alibaba Fastjson 解析泛型类型 JsonResult<SysUserDTO> 的问题

解决 Java 中使用 Alibaba Fastjson 解析泛型类型JsonResult<SysUserDTO>的问题。

核心问题

由于 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 保留泛型信息 JsonResult<SysUserDTO> result = JSON.parseObject(jsonStr, new TypeReference<JsonResult<SysUserDTO>>() {}); SysUserDTO user = result.getData();

方案二:使用Type对象

java

复制

import com.alibaba.fastjson.JSON; import java.lang.reflect.Type; // 构建带泛型的 Type Type resultType = new com.alibaba.fastjson.TypeReference<JsonResult<SysUserDTO>>() {}.getType(); JsonResult<SysUserDTO> 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)

如果你使用的是 Fastjson2:

java

复制

import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.TypeReference; JsonResult<SysUserDTO> result = JSON.parseObject(jsonStr, new TypeReference<JsonResult<SysUserDTO>>() {});

完整示例

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\": \"zhangsan@example.com\"\n" + " }\n" + "}"; // ✅ 正确做法 JsonResult<SysUserDTO> result = JSON.parseObject(json, new TypeReference<JsonResult<SysUserDTO>>() {}); System.out.println("Code: " + result.getCode()); System.out.println("User: " + result.getData().getUsername()); } } // 定义类 @Data public class JsonResult<T> { 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 JsonResult<SysUserDTO> result = JSON.parseObject(jsonStr, JsonResult.class);

依赖配置

xml

复制

<!-- Fastjson 1.x --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.83</version> </dependency> <!-- Fastjson2 --> <dependency> <groupId>com.alibaba.fastjson2</groupId> <artifactId>fastjson2</artifactId> <version>2.0.43</version> </dependency>

总结

表格

复制

方案适用场景推荐度
TypeReference大多数场景⭐⭐⭐
Type对象需要动态构建类型时⭐⭐⭐
分步转换兼容旧代码或特殊需求⭐⭐
Fastjson2新项目⭐⭐⭐

核心要点:解析带泛型的类时,必须使用TypeReference来保留完整的泛型信息,否则 Fastjson 无法知道T具体是什么类型。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/11 13:33:39

计算机毕业设计springboot学生闲置品交易平台 Spring Boot框架下高校闲置资源共享平台的设计与开发 基于微服务架构的校园循环经济交易服务平台构建

计算机毕业设计springboot学生闲置品交易平台ax23jts9 &#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。在当今社会&#xff0c;随着经济的快速发展和人们生活水平的提高&#xff…

作者头像 李华
网站建设 2026/5/10 20:08:47

直接上结论:8个降AIGC工具测评,专科生降AI率必备攻略

在当前的学术写作环境中&#xff0c;AI生成内容&#xff08;AIGC&#xff09;已经成为高校和研究机构重点关注的对象。尤其是对于专科生来说&#xff0c;论文中如果存在明显的AI痕迹&#xff0c;不仅会影响查重率&#xff0c;还可能被判定为学术不端行为。因此&#xff0c;如何…

作者头像 李华
网站建设 2026/5/10 0:32:38

大模型驱动的智能体系统:架构设计与技术实现

本文详细探讨了基于大语言模型的智能体系统设计与实现&#xff0c;包括LLM在智能体中的核心作用、三层架构设计、上下文管理与记忆模块&#xff0c;以及与API和向量数据库的集成。介绍了ReAct、Hugging Face和LangChain等关键框架&#xff0c;并通过金融智能客服等实例展示了完…

作者头像 李华
网站建设 2026/5/9 23:42:29

区块链商业价值预测数据分析

摘要&#xff1a;根据Gartner数据&#xff0c;区块链商业价值发展可分为三个阶段&#xff1a;探索期(2018-2022)年均增长22.6%&#xff0c;加速期(2023-2027)年均增长55.2%&#xff0c;成熟期(2028-2030)年均增长51.7%。预计2030年市场规模将达1360亿美元&#xff0c;复合年增长…

作者头像 李华
网站建设 2026/5/10 10:11:14

HCCL Profiling通信耗时埋点与Timeline生成

摘要 在大规模分布式训练中&#xff0c;通信效率直接决定整体性能。HCCL Profiling通过精准的通信操作耗时埋点&#xff0c;生成可视化Timeline&#xff0c;为性能瓶颈定位提供数据支撑。本文将深度解析/hccl/profiler/trace_collector.cpp的实现机制&#xff0c;演示AllReduc…

作者头像 李华