有关com.alibaba.fastjson 字符串转换对象时,TypeReference泛型的使用

fastjson2 反序列化包含多层泛型结构的实体类 泛型被擦除 解决方案 阅读详情

调用接口api返回数据时候,在代码中不想写魔法值(未申明的常量),所以想用具体类型接收。

下面我生成了一些测试的json字符串提供了测试。

String jsonStr="{\"success\":true,\"requestid\":\"0af8f5df\",\"code\":null,\"msg\":null,\"detail\":null,\"data\":{\"dataSuccess\":true,\"message\":[{\"apimaterNo\":\"hw-001\",\"corpcode\":\"44199880\",\"ismatch\":\"1\",\"itemno\":\"129004525\",\"remark\":\"对照\",\"requestno\":\"201912121336445344\"}],\"method\":\"addPurchaseApply\",\"returnstatus\":0}}";
// 写法一
JSON.parseObject(jsonStr,new TypeReference<ResponseResult<DataInfo<DataMessage>>>(){})

// 写法二
JSON.parseObject(jsonStr,new TypeReference<ResponseResult<Object>>(){})

其中写法一的截图如下:

 

写法二截图:

写法二转换信息

message 信息类型默认转换(源码看通过case 判断 '['  '{'来生产对应类型),其中有关具体转换方法感兴趣查看源码。

说明:以上用到的所有实体类

@Data
public class DataInfo<T> {

    /**
     * 未说明
     */
    private boolean dataSuccess;

    /**
     * 未说明
     */
    private String method;

    /**
     * 未说明
     */
    private  int  returnstatus;


    private List<T> message;

}
@Data
public class DataMessage {

    private String apimaterNo;

    private String corpcode;

    private String ismatch;

    private String itemno;

    private String remark;

    private String requestno;
}
@Data
public class ResponseResult<T> {
    /**
     * 处理结果
     */
    private boolean success;

    /**
     * 未知
     */
    private String requestid;

    /**
     * 发生异常事的错误码
     */
    private String code;
    /**
     * 未说明
     */
    private String msg;
    /**
     * 未说明
     */
    private String detail;

    /**
     * 返回的数据
     */
    private T data;

}

以上为用到的三个类,其余类com.alibaba.fastjson 包下类

总结:

更新于2022年7月15日。

在测试过程中发现,fastjson2.0.1 (2|3)版本上述方式运行会抛出异常。

正常解析的版本:1.2.83  、 2.0.9、2.0.8,更多版本可以自行尝试。

Fastjson2多层泛型反序列化实战:从TypeReference到自定义解析器的完整指南 本文深入探讨了Fastjson2在处理多层泛型反序列化时的核心挑战与解决方案。针对Java泛型类型擦除问题,详细解析了从使用TypeReference、@JSONType注解到自定义反序列化器的完整实践路径,并提供了性能优化与版本迁移策略,帮助开发者高效处理如Result<Page<UserDTO>>等复杂嵌套结构的JSON数据。 阅读详情

相关推荐

FastJson2.0介绍和使用

FASTJSON v2是FASTJSON项目的重要升级,目标是为下一个十年提供一个高性能的JSON库。通过同一套API,

全栈行动派的博客 6836

fastjson中的TypeReference的用法以及作用

TypeReference的作用以及用法

qq_62638981的博客 2263

nnDetection实战:手把手教你用Python在自家电脑上跑通第一个肺结节检测模型

本文详细介绍了如何使用nnDetection框架在普通电脑上实现肺结节检测模型的搭建与运行。从环境配置、数据预处理到模型训练与推理,手把手教你完成医学图像检测的全流程,特别适合初学者入门医学AI领域。

weixin_32377497的博客 330

FastJson的typeReference使用场景

原文 当我们需要反序列化一个mapmapmap时 public static void main(String[] args) { Map<String, Person> map = new HashMap<>(16); map.put("one", new Person("zhangsan")); map.put("two", new Person("lisi")); String jsonStr = JSON

jziwjxjd的博客 1030

CRC校验查表法详解

CRC校验的查表法理解算法原理基础计算查表法原理及计算查表法中的表CRC校验中数据逆序CRC校验中的其它参数 算法原理 CRC(Cyclic Redundance Check)循环冗余校验,是基于某个多项式计算出一组校验码,用于核对数据传输过程中是否被更改或传输错误 基础计算 假设需要检验的数据 g :10100111,这串二进制码可以表示为代数多项式g(x) = x^7 + x^5 + x^2 + x +1, 而作为除数的多项式 h(x) 可以自由选择或者按照国际标准选择,一般h(x)的阶数如果是m

boom的博客 1万+

<视觉>——单目相机的标定(简单原理+Opencv实现)

单目相机的标定原理大致如下: 世界坐标到像素坐标的转换。 期间的参数有S尺度因子,内参矩阵K,旋转矩阵R,平移矩阵T,一共八个未知数。 在Opencv中我们可以方便的根据相机拍摄不同位姿的标定板图片来标定相机,从而求得这些参数,从而可以将相机下的坐标和实际的世界坐标联系起来,求取单应性矩阵H 参考: 单目相机综述:写的特别好 https://www.cnblo...

Kano365的博客 1万+

fastjson 泛型转换问题(详解)

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。

demo_yo的博客 2494

网工最容易搞混的三个概念:防火墙、网闸、堡垒机,一文让你轻松搞明白。

网闸的作用可以简单概括为:在两个或多个不同安全级别的网络(如内网和外网、普通网与高安全网、受限网与互联网)之间建立一个严格隔离、信息流转的安全桥梁。它的核心任务是实现数据安全传输与隔离,避免网络之间的直接连接带来的安全隐患。数据传输安全:网闸保证数据从一个网络到另一个网络时,能够进行审查、过滤和转换,防止恶意数据或非法信息被传入内部网络或外部泄露。高安全性隔离:网闸常常用于企业的内外网隔离、军事网络、政府机关等对数据隔离要求极高的环境。

HWP18612324139的博客 3635

fastjson 报错:com.alibaba.fastjson.JSONObject cannot be cast to xxxx

这样转没问题,get获取参数也正常,但是如果对象为(如StockData)时,像上面那样进行转换也是可以转换,但是StockDetail通过get获取对象参数时就会抛异常com.alibaba.fastjson.JSONObject cannot be cast to cn.seagen.sorting.bean.StockDetail。提示JSONObject 不能转换为StockDetail对象,原因大概意思是:fastjson 转换 json 对象遇到泛型时,...

UrasakiNakajima的博客 1万+

从零开始讲DDR(8)——AXI 接口MIG 使用(1)

我们简单拆解了MIG AXI接口中测试文件的整体框架,首先在sim_tb_top.sv文件中例化了DDR模型和example_top。在example_top中,又例化了MIG IP和一个流量产生器ddr4_v2_2_8_axi_tg_top。在ddr4_v2_2_8_axi_tg_top中的主要功能是分别例化了boot_mode_gen,prbs_mode_gen,custom_mode_gen和axi_opcode_gen。

apple_53311083的博客 1587

【调优】OpenClaw调优之模型(tokens)篇

OpenClaw用户常遇四大痛点:规则被无视、API账单暴涨、低效模型选择、记忆丢失。通过/context list命令可解析上下文组成,包括工作区配置、引导参数限制、系统提示词等关键信息。重点需关注Token消耗来源,如核心配置文件、技能工具说明等,避免静默截断。建议精简非必要内容,优化记忆机制,平衡功能与成本。该分析帮助用户减少无效操作,合理控制API支出。

海兰 990

fastjson 将字符串转为带泛型的对象时,获取对象的参数值报错:com.alibaba.fastjson.JSONObject cannot be cast to xxxx

有一个StockData对象,正常情况下用fastjson将字符串转为这个StockData对象应该是: StockData stockData = JSONObject.parseObject(str, StockData.class); 这样转没问题,get获取参数也正常,但是如果对象为泛型(如StockData<StockDetail>)时,像上面那样获取: StockData<StockDetail> stockData = JSONObject.parseObject(s

xiaoxiao48的博客 1033

Linux内核4.14版本——drm框架分析(1)——drm简介

本文介绍了DRM架构的发展历史、驱动框架以及简单示例,旨在帮助读者了解DRM架构的形成、功能流程实现。

phmatthaus的专栏 2551

fastJson泛型如何转换

引子   现在负责的业务 和 json 打交道比较多, 最近使用fastJson框架 json串转成泛型对象遇到了一个异常 : java.lang.ClassCastException   还原下场景 :  模型Result public class Result { private String msg; private List module; publ

weixin_37898941的博客 555

【RT-DETR实战】112、NCNN模型转换与层实现支持:从模型文件到推理引擎的硬核实战

本文详细记录了将RT-DETR模型部署到NCNN框架的全过程及关键要点。作者首先遇到MultiHeadAttention等算子不支持的问题,通过ONNX中间转换和自定义层实现解决。文章具体介绍了PyTorch到NCNN的权重转换技巧、模型优化方法(包括量化和线程优化)以及调试经验,强调逐层对比输出、预处理检查和边界情况测试的重要性。最后分享了保持转换流程可复现性的实用建议,指出手动调试虽然耗时但能加深对模型的理解,体现了工程师在解决技术难题时的专业精神与成就感。

企鹅码农的专属播客,分享10多年的实战案例和经验解读,包含YOLO、RT-DETR、AI等各个工作领域。 41

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

com.alibaba.fastjson 初介绍

com.alibaba.fastjson Json 一:什么是Json Json是一种轻量级的数据交换格式,采用一种“键:值”对的文本格式来存储和表示数据,在系统交换数据过程中常常被使用,是一种理想的数据交换语言。在使用Java做Web开发时,不可避免的会遇到Json的使用。下面我们就简单讲一下Json的使用以及fastjson.j...

weixin_41563161的博客 5027

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

com.alibaba.fastjson使用总结

json的解析最主要的工作就是,javaBean对象,json对象,json格式字符串之间的相互转换 参考博客:写的比较全面,简单易懂 https://segmentfault.com/a/1190000011212806 注意: json格式字符串需要满足: String mediaList = "[{\"mediaId\":11,\"mediaName\":\"abc\"},{\"m...

NokeNoke的博客 1175

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

com.alibaba.fastjson 把JSONObject转换为Map(String, Integer)对象

JSONObject obj = new JSONObject(); { obj.put("key1", "value1"); obj.put("key2", "value2"); obj.put("key3", "value3"); } Map<String, Integer> params = JSONObject.parseObject(obj.toJSONString(), n...

hellojoy的博客 1万+

关于TypeReference的使用

以常见为例,在com.alibaba.fastjson包下面的TypeReference类,是指Type的Reference,表示某类型的一个指向或者引用.在项目中,有遇到TypeReference的使用,其主要在字符串转对象过程中,对于序列化和反序列化中也有效果,将字符串转换成自定义对象.在JSON字符串转自定义对象过程中, 和对象序列化与反序列化中, 都可以使用TypeReference来指定或引用给某一对象.2 常见序列化和反序列化。1 常见字符串转对象。

ABestRookie的博客 2031

alibaba fastjson TypeReference 通过字符串反射返回对象

TypeReferenceEditNew Page温绍 edited this page Nov 3, 2017 · 8 revisions1. 基础使用在fastjson中提供了一个用于处理泛型反序列化的类TypeReference。 import com.alibaba.fastjson.TypeReference; List&lt;VO&gt; list = JSON.parseObject...

weixin_33700350的博客 665

使用FastJson在JSON字符串、JSON对象及JavaBean、Map之间的相互转换

https://blog.csdn.net/a18716374124/article/details/78803789 fastJson对于json格式字符串的解析主要用到了一下三个类: JSON:fastJson的解析器,用于JSON格式字符串与JSON对象及javaBean之间的转换。 JSONObject:fastJson提供的json对象。 JSONArray:fastJson提供...

JKjiang123的博客 2085

net.sf.json和com.alibaba.fastjson的数据处理

一、net.sf.json 1、Json转Map JSONObject jsonObject = JSONObject.fromObject(jsonStr); Map<String,Object> map = new HashMap<>(); map.put("code",jsonObject .getInt("code")); 2、Json转实体 JSONObje...

suiyueran8023的博客 913

com.alibaba的fastjson简介

fastjson简介 Fastjson是一个Java语言编写的高性能功能完善的JSON库。它采用一种“假定有序快速匹配”的算法,把JSON Parse的性能提升到极致,是目前Java语言中最快的JSON库。Fastjson接口简单易用,已经被广泛使用在缓存序列化、协议交互、Web输出、Android客户端等多种应用场景 1.前言 1.1.FastJson的介绍: JSON协议使用...

570

使用.alibaba.fastjson包进行json数据的转换!

参考:https://www.cnblogs.com/cdf-opensource-007/p/7106018.html 以下是对于json简单的格式和数据格式,还有就是包含前2种格式的第三格式 package Fastjson; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import c...

weixin_41244495的博客 1760

FastJson将json解析成含有泛型对象,内部泛型对象再次解析出错的解决办法

ResultMapVo resultMapVo = JSON.parseObject(res, new TypeReference<ResultMapVo>(){});

huihui_1223的博客 620
上一篇: 针对 input 输入框输入内容的限制(仅输入整数和小数保留两位)
下一篇: shiro 使用FormAuthenticationFilter 用于校验用户登录时,所考虑的问题
javabro
博客等级 码龄10年 5粉丝 7原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值