news 2026/11/6 11:02:14

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/11/3 0:02:59

Bayes-CNN贝叶斯优化卷积神经网络多输入单输出回归预测(Matlab) 1

Bayes-CNN贝叶斯优化卷积神经网络多输入单输出回归预测&#xff08;Matlab&#xff09;1.命令窗口输出MAE、MSE、RMSEP、R^2、RPD和MAPE 2.贝叶斯优化算法优化参数为学习率、批处理样本大小和、正则化参数。 3.输入6个特征&#xff0c;输出1个变量直接上干货&#xff0c;今天咱…

作者头像 李华
网站建设 2026/11/4 6:32:40

聚铭网络再度入选2026年度扬州市网络和数据安全服务资源池单位

为加强扬州市网络和数据安全技术支撑体系建设&#xff0c;提升网络和数据安全应急处置和风险防范能力&#xff0c;扬州市委网信办公开遴选2026年度网络和数据安全服务资源池单位。经自主申报、资质审查、专家评议等环节&#xff0c;最终确定包括聚铭网络在内的24家企业入选《20…

作者头像 李华
网站建设 2026/11/3 0:02:53

AI实战:念念不忘小程序上线啦,带你重温美好时光

还在担心珍贵瞬间被遗忘&#xff1f;微信小程序「念念不忘」正式上线&#xff01;AI智能分析你的照片&#xff0c;自动生成百字回忆——时间、地点、人物、故事&#xff0c;一键呈现。首页每日推送一张专属老照片&#xff0c;生日前两周自动展示靓照&#xff0c;纪念日临近也能…

作者头像 李华
网站建设 2026/11/3 0:02:53

2026别错过!8个降AI率软件降AIGC网站评测:自考论文降重全攻略

在2026年&#xff0c;随着AI技术的不断进步&#xff0c;学术论文中AI生成内容&#xff08;AIGC&#xff09;的比例也在逐年上升。对于自考学生而言&#xff0c;如何有效降低论文的AIGC率、去除AI痕迹并优化查重率&#xff0c;已成为一项关键任务。传统的人工修改方式不仅耗时耗…

作者头像 李华