JSON字符串转泛型对象

JSON字符串转泛型对象

以下问题只仅限于博主自身遇到,不代表绝对出现问题

相关类展示:

参数基类

public class BaseParams {
}

基类

public abstract class AbstractPush<Params extends BaseParams> {protected abstract void execute(Params params);public void push(String json){//todo 分fastjson和fastjson2说明}}

测试类

public class TestPush extends AbstractPush<TestParams>{@Overrideprotected void execute(TestParams params) {System.out.println("params = " + params);}
}

测试类的泛型参数

import lombok.Data;@Data
@Accessors(chain = true)
public class TestParams extends BaseParams{private String name;private String sex;private Integer age;
}

错误案例

不能如下案例这样使用,在FastJson中,写法不报红;在FastJson2中,写法报红

基类#push(String)

public void push(String json){Type type = ((ParameterizedType) this.getClass().getGenericSuperclass()).getActualTypeArguments()[0];Params params = JSONObject.parseObject(json, new TypeReference<Params>(type) {});this.execute(params);
}

入口类

public class TestFunction {public static void main(String[] args) {TestPush testPush = new TestPush();TestParams testParams = new TestParams();testParams.setName("张三").setSex("男").setAge(10);testPush.push(JSON.toJSONString(testParams));}
}

执行结果:
在这里插入图片描述

参考网上资料(文末有说明),改进版

使用FastJson去按照以下案例处理,会在对象转JSON时(JSON.toJSONString),转化结果为{};使用FastJson2在不使用Feature配置项也返回{}。只有当配置了Feature才会返回私有属性。

后续博主也无法复现,故在使用TypeReference最好使用FastJson2,且使用Feature配置项来保证以外发生

转换类(新增)

@Data
public class Convertor<Params extends BaseParams> {private Params params;}

基类#push(String)

public void push(String json){Type type = ((ParameterizedType) this.getClass().getGenericSuperclass()).getActualTypeArguments()[0];Convertor<Params> convertor = JSONObject.parseObject(json, new TypeReference<Convertor<Params>>(type) {},JSONReader.Feature.FieldBased);this.execute(convertor.getParams());
}JSONReader.Feature.FieldBased:基于字段反序列化,如果不配置,会默认基于public的field和getter方法序列化。配置后,会基于非static的field(包括private)做反序列化。在fieldbase配置下会更安全

入口类

public class TestFunction {public static void main(String[] args) {TestPush testPush = new TestPush();Convertor<TestParams> convertor = new Convertor<>();TestParams testParams = new TestParams();testParams.setName("张三").setSex("男").setAge(10);convertor.setParams(testParams);String s = JSON.toJSONString(convertor, JSONWriter.Feature.FieldBased);testPush.push(s);}
}

执行结果:
在这里插入图片描述

参考:

fastJSON,使用TypeReference处理复杂的泛型对象

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/257389.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql数据库中int字段长度,即int(1)和int(10)的区别

1.起因 为什么想起来看这个问题&#xff0c;是最近有同事问mysql的init类型的字段长度的问题&#xff0c;他问int(1)和int(10)是什么意思&#xff0c;是字段长度越大&#xff0c;能存储的数字越大么&#xff1f;咋一问&#xff0c;还有点懵&#xff0c;从惯性思维来看&#xf…

论文分享 | 基于机载单目视觉的四旋翼无人机群内相对定位

阿木实验室推出的开源项目校园赞助活动&#xff0c;再次迎来开发者参与&#xff01; 国防科技大学电子对抗学院司晓坤同学&#xff0c;在Prometheus开源仿真架构的基础上进行了二次开发&#xff0c;且使用Prometheus 450&#xff08;P450&#xff09;进行了真机实验并发表了相…

12月8日星期五今日早报简报微语报早读

12月8日星期五&#xff0c;农历十月廿六&#xff0c;早报微语早读。 1、广东男篮官宣&#xff1a;易建联9号球衣退役12月29日 正好首秀21周年&#xff1b; 2、2024届全国普通高校毕业生规模预计达1179万人&#xff1b; 3、国务院&#xff1a;严禁新增钢铁产能 严格合理控制煤…

leetcode面试经典150题——35 螺旋矩阵

题目&#xff1a; 螺旋矩阵 描述&#xff1a; 给你一个 m 行 n 列的矩阵 matrix &#xff0c;请按照 顺时针螺旋顺序 &#xff0c;返回矩阵中的所有元素。 示例&#xff1a; 输入&#xff1a;matrix [[1,2,3],[4,5,6],[7,8,9]] 输出&#xff1a;[1,2,3,6,9,8,7,4,5] 提示&…

Linux centos8安装JDK1.8、tomcat

一、安装jdk 1.如果之前安装过jdk&#xff0c;先卸载掉旧的 rpm -qa | grep -i jdk 2.检查yum中有没有java1.8的包 yum list java-1.8* 3.yum安装jdk yum install java-1.8.0-openjdk* -y 4.验证 二、安装tomcat Index of /tomcat 可以在这里选择你想要安装的tomcat版本…

学习设计模式的一个好网址

常用设计模式有哪些&#xff1f; (refactoringguru.cn)https://refactoringguru.cn/design-patterns

统信UOS_麒麟KYLINOS安装奇安信并自动配置服务器IP端口号

往期好文&#xff1a;麒麟iso镜像中GRUB字体大小怎么改&#xff1f; hello&#xff0c;大家好啊&#xff0c;今天我要给大家介绍的是在统信UOS或者麒麟KYLINOS操作系统上安装奇安信网神终端管理系统&#xff0c;并通过自动配置IP及端口号来简化管理流程的方法。这种配置主要通过…

Linux-实现小型日志系统

目录 一.日志 二.实现任意个数元素求和 三.编写一个日志函数 1.设置日志等级 2.设置日志时间 3.设置日志的打印格式 4.将日志的内容输出到文件 一.日志 日志等级&#xff0c;日志时间&#xff0c;日志内容&#xff0c;文件的名称和行号 日志等级…

UEFI下Windows10和Ubuntu22.04双系统安装图解

目录 简介制作U盘启动盘并从U盘启动电脑安装系统安装Windows系统安装Ubuntu 附录双系统时间不一致 简介 传统 Legacy BIOS主板下的操作系统安装可参考本人博客 U盘系统盘制作与系统安装&#xff08;详细图解&#xff09; &#xff0c;本文介绍UEFI主板下的双系统安装&#xff…

关于mysql高版本使用groupby导致的报错

在开发时&#xff0c;遇到mysql版本在5.7.X及以上版本时使用group by 语句会报以下的错误 Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column business_typ…

代码混淆技术探究与工具选择

引言 在软件开发中&#xff0c;保护程序代码的安全性是至关重要的一环。代码混淆&#xff08;Obfuscated code&#xff09;作为一种常见的保护手段&#xff0c;通过将代码转换成难以理解的形式来提升应用被逆向破解的难度。本文将介绍代码混淆的概念、方法以及常见的代码混淆工…

[Linux] Bash脚本多函数应该如何执行?使用eval提高脚本编写效率!

在工作过程中经常会编写一些测试脚本&#xff0c;有些脚本里有多个函数&#xff0c;要通过用户输入执行对应的函数&#xff0c;如这样&#xff1a; 这也太麻烦了吧 执行如下&#xff1a; 这样在函数多的情况下需要写很多判断&#xff0c;效率低下。 我们可以使用eval命令来进行…