Google中Gson的巧妙使用 —————— 开开开山怪

晶振匹配电容容值计算方法 在使用晶振时,应仔细参考晶振规格书,以确保正确选择匹配电容,从而获得稳定和精准的时钟源。 阅读详情

Gson的使用

这篇相当于是一个分发器中的一个内容补充,但是同时也真正巧妙的使用了Gson这个强大的类。

首先说说这个Gson的类,类中的一个方法 toJson(Object)可以将一个任意类型转化为字符串。
并且还有另一个方法fromJson(String, Type),可以将一个字符串通过给出的类型转化成一个实例。
这对于我们分发器中参数 content 的包装和解析非常实用。

图一

在这里插入图片描述

图二在这里插入图片描述

这两幅图并不陌生,content 参数的形成通过 makePar类 进行包装,makePar类实际上做了件什么事情呢?

其实很容易发现我们由makePar类所构造的字符串中的 userName 和 passWord 实际上就是我们配置方法中参数的注解值(相当于参数名称),加actionPara注解的原因是我们不能通过方法的参数获得到参数的名称,只能获得参数的类型。

makePar类中有一个map<String, String>,键就是参数的名称(在这里键就是userName,passWord),值就是真正参数的值转化为字符串作为map的值,最终将整个map转化为字符串就形成了content。

并且 makePar类 还可以将 content 进行还原到 map<String, String> 的形式,为什么要这么来回的去包装和解析呢,原因只有一个,我们底层是通过字符串进行传输,并且除过字符串之外,也只能是字节流。

在dealAction类中就会采用makePar类中的方法进行解析将content又还原到map<String, String> 的形式。因为我们已经拥有 classDefinition了,同时我们也能获取到classDefinition中的 method,那我们也同时可以通过反射得到 method中的众多带有actionPara注解的参数,那此时我们就可以得到真正的方法参数值了,因为参数注解上拥有参数的名称,我们可以通过名称在map中找得到对应的参数真正值所转化成的String类型的值,再通过参数的类型,采用gson.fromJson(String, type),将String类型转化为真正类型的参数值,然后将参数形成一个Object [ ],那 method.invoke(object, object[ ]) 就真正的可以执行了。

makePar类
public class makePar {
	private static final Gson gson = new GsonBuilder().create();
	private Map<String, String> gsonMap; 
	private static final Type type =  new TypeToken<Map<String, String>>(){}.getType();
	
	public makePar() {
	 
	 gsonMap = new HashMap<String, String>(); 
	}
	//针对参数来说,将字符串反解一个拥有键值对的map
	   public makePar(String para) { 
	 gsonMap = gson.fromJson(para, type);
	}  
	   //针对当解析一个方法的参数的时候,方法的参数不是基本的类型,而是牵扯到泛型类
	   //采用type来处理
	   @SuppressWarnings("unchecked")
	public <T> T getParaValue(String name, Type type) {
	    String value = gsonMap.get(name);
	    if (value == null) {
	     return null;
	    }
	    return (T) gson.fromJson(value, type);
	   }
	    
	   //针对一般类型的参数类型
	   @SuppressWarnings("unchecked")
	public <T> T getParaValue(String name, Class<?> type) {
	    String value = gsonMap.get(name);
	    if (value == null) {
	     return null;
	    }
	    return (T) gson.fromJson(value, type);
	   }
	    
	public static Gson getGson() {
	 return gson;
	}
	//向map中添加键值对
	public makePar addTomap(String key, Object value) {
	 
	 gsonMap.put(key, gson.toJson(value));
	 
	 return this;
	}
	//将map整个转化成一个字符串
	public String toGson() {
	 if (gsonMap.size() <= 0) {
	  return null;
	 }  
	 return gson.toJson(gsonMap);
	} 
}
	```
	
	
	
	
	
	
	
1. 基于STM32的1.28寸圆形IPS屏(GC9A01)驱动移植实战:软件SPI与硬件SPI双方案详解 本文详细介绍了如何在STM32平台上为1.28寸圆形IPS屏(GC9A01驱动芯片)移植驱动程序,涵盖软件SPI与硬件SPI两种实现方案。内容从引脚定义、工程搭建、GPIO配置到SPI外设初始化逐步详解,并提供了完整的测试代码,帮助开发者根据项目需求(灵活性或性能)选择合适的通信方式,快速点亮屏幕并集成到智能手表等嵌入式项目中。 阅读详情

相关推荐

I2C总线原理及总线信号的实现

I2C总线是一种多主机总线,连接IIC总线上的器件分为主机和从机,主机有权发起和结束一次通信,而从机只能被主机呼叫;当总线上有多个主机同时启用总线时,I2C也具备冲突检测和仲裁的功能来防止错误产生;每个连接到IIC总线上的器件都有一个唯一的地址(7bit),且每个器件都可以作为主机也可以作为从机(同一时刻只能有一个主机),总线上的器件增加和删除不影响其他器件正常工作;I2C总线在通信时总线上发送数据的器件为发送器,接收数据的器件为接收器;主要用于近距离(抗干扰能力稍弱),低速的芯片之间的通信(传输视频,带宽

YLG_lin的博客 3941

注解实现json序列化的时候自动进行数据脱敏

最近在进行开发的时候遇到一个问题,需要对用户信息进行脱敏处理,原有的方式是写一个util类,在需要脱敏的字段查出数据后,显示掉用方法处理后再set回去,觉得这种方式能实现功能,但是不是特别优雅,想找个比较优雅的实现。接口输出json,于是去查询了一下相关的资源,jackson可以指定某个字段的自定义序列化类,那么还有一个问题,我指定了用某个类进行序列化,但是在序列化的时候如果判断脱敏的类型呢,翻看网上大神的文章得知,是 Jackson 提供的另一个序列化相关的接口,它的作用是通过字段已知的上下文信息定制。

t194978的博客 1047

安卓开发者必看:Win11最新Fastboot驱动安装避坑指南(含Android Bootloader Interface选择技巧)

本文为安卓开发者提供了Windows 11系统下Fastboot驱动安装的详细指南,特别针对Android Bootloader Interface选择技巧和多设备并发连接时的驱动冲突问题。通过解析Windows 11的特殊驱动验证机制,推荐使用Google官方USB驱动,并提供安装流程、版本选择建议及疑难问题排查方法,帮助开发者高效完成开发环境配置。

sea99的博客 1330

如何通过LLM Cursor Rules实时编程直播快速掌握AI辅助开发实战技巧

想要提升编程效率?想要学习如何利用AI工具进行高效开发?LLM Cursor Rules实时编程直播为你提供了绝佳的学习机会!在这篇完整指南中,我将为你详细介绍如何通过观看专业开发者的实时编程直播,快速掌握AI辅助开发的核心技巧和最佳实践。 ## 🚀 什么是LLM Cursor Rules? **LLM Cursor Rules** 是一个专门为AI辅助开发设计的规则集合,它包含了在软件开发

gitblog_00414的博客 416

从时序迷宫到稳定通信:FSMC配置中的时间参数深度解析与实战避坑指南

本文深入解析STM32 FSMC配置中的时间参数,特别是AddressSetupTime和DataSetupTime的实战配置技巧。通过STM32F407连接SRAM的实际案例,提供从理论计算到CubeMX配置的全流程指南,帮助开发者避免常见时序陷阱,确保稳定通信。

nginx7reverse的博客 81

从Demo到产品:基于ADAU1452的ANC方案,硬件选型、性能优化与避坑指南

本文详细解析了基于ADAU1452的主动降噪(ANC)方案从Demo到产品的实现路径,涵盖硬件选型、性能优化与实战避坑指南。重点探讨了ADAU1452与ADAU1466的性能差异、编解码器选型策略,以及MFXLMS算法优化技巧,为工程师提供从理论验证到量产落地的系统级解决方案。

weixin_30542079的博客 451

Guava 骚操作,10分钟搞定日志脱敏需求!

???? 这是一个或许对你有用的社群???? 一对一交流/面试小册/简历优化/求职解惑,欢迎加入「芋道快速开发平台」知识星球。下面是星球提供的部分资料:《项目实战(视频)》:从书中学,往事上“练”《互联网高频面试题》:面朝简历学习,春暖花开《架构 x 系统设计》:摧枯拉朽,掌控面试高频场景题《精进 Java 学习指南》:系统学习,互联网主流技术栈《必读 Java 源码专栏》:知其然,知其所以然????这是一个或许...

芋艿V 225

大麦网回流票监控实战:如何利用sign参数和cookie实现自动抢票(避坑指南)

本文详细介绍了如何利用sign参数和cookie构建大麦网回流票监控系统,实现自动化抢票。通过分析大麦网票务系统的核心机制、获取关键身份凭证、逆向分析sign签名算法,并构建完整的监控系统,帮助用户高效捕捉回流票机会。文章还提供了实战避坑指南和合法合规的注意事项,确保系统稳定运行且符合平台规则。

weixin_28568819的博客 411

使用fastjson进行序列化时进行数据脱敏

fastjson 是阿里巴巴开源的一款优秀的java生态下序列化/反序列化产品,我们可以在不同的服务之间进行数据交互时使用它,同样可以输出日志时使用fasnjson把对象转化为String, 然后再进行采集,比调用对象的toString方法靠谱,比如如果对象内部没有实现toString方法就不能正确输出想要的信息, 另一方面json格式的日志数据,后续可观性也会好一些; 问题 使用fastjso...

江无羡 6346

时间同步中 TOD 与GPRMC和IRIG-B的区别

时间同步中 TOD 与GPRMC和IRIG-B的区别

ftdlk的博客 1724

CPG控制网络入门

从线性变换开始推导

妖米的博客 5043

五种自定义脱敏实现方式

文章目录(一)Json序列化实现脱敏(二)使用MyBatis的拦截器功能(三)通过实现ResponseBodyAdvice接口进行返回数据脱敏(四)数据库查询脱敏(五)AOP切面方式实现脱敏 (一)Json序列化实现脱敏 常见的JSON工具包有gson和fastsjon、jackson。我们可以通过对数据的自定义序列化进行脱敏。主要实现就是通过自定义对应标识字段的序列化方式。 (二)使用MyBatis的拦截器功能 如果项目中使用了MyBatis作为持久层框架,那么可以利用框架所提供得拦截器组件进行数据后置的

发现问题,面对问题,分析问题,解决问题,总结问题 4609

智能小车避障功能的实现(cpp,ubuntu)

智能小车避障功能的实现(cpp,ubuntu)

weixin_62135607的博客 4376

Google Gson 字段过滤:基于 Gson 版本

当为生成的 Google Gson 对象指定版本信息时,可以使用 @Since 和 @Until 注释实现字段过滤。@Since 和 @Until 都接收一个 double 类型参数。 @Since 当设置的 Gson 对象版本大于或等于其所接收的参数时导出该字段 @Until 当设置的 Gson 对象版本小于其所接收的参数时导出该字段 示例 (1) POJO 对象 public cl...

android开发笔记 512

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

温度PID控制PLC程序

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

Google Gson用法详解

Gson(又称GoogleGson)是Google公司发布的一个开放源代码的Java库,主要用途为序列化Java对象为JSON字符串,或反序列化JSON字符串成Java对象。gsonGson在默认序列化和反序列化方面提供了非常出色的功能。不过,我们可能会遇到默认和内置自定义选项无法解决我们问题的情况。在这种情况下,我们可以通过两个接口JsonSerializer和JsonDeserializer使用自定义序列化和反序列化。{}}{}}}{{{"id"{...

Goals1989的博客 1728

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

采用JDBC解释java SPI机制和线程上下文类加载器 —————— 开开开山怪

采用JDBC解释java SPI机制和线程上下文类加载器 先说说SPI(Service Provider Interface),大部分解释是这样的,我简单总结一下就是这样,SPI机制可以做到将服务接口和和真正的服务接口的实现类分开,可以增加程序的可扩展性,通过扫描规定的路径来进行实现类的获取,可以说是一种服务发现机制。 好处就在于,在面向对象的设计中,我们一般建议基于接口的编程,如果代码中涉及到...

String_guai 600

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

文本文件与二进制文件区别 r 与 rb 方式 w 与 wb方式(windows)—————— 开开开山怪

文件属于外存的范畴: 其实不管是文本文件还是二进制的文件,其本质都是以二进制的方式进行存储的,只是解释的方式不同罢了,文本文件是将原本的二进制解释称文本文件的方式(也就是ASCII的方式),而二进制就是存储的时候什么样子,打开就是什么样子。 1. &amp;lt; w 和 wb方式打开文件并进行写的操作的区别&amp;gt; 最常听到回答就是: r 是以文本文件的方式打开并且是只读方式打开 rb 是以二进制的凡...

String_guai 3699

五分钟搞懂Gson的用法

五分钟搞懂Gson的用法 谷歌GSON这个Java类库可以把Java对象转换成JSON,也可以把JSON字符串转换成一个相等的Java对象。Gson支持任意复杂Java对象包括没有源代码的对象。 其他的json解析库还有json-lib;Jackson;com.alibaba.fastjson 小编还是喜欢Google的Gson。 使用场景: java对象和json字符串

sunny_lin5的博客 455

服务发现框架 —————— 开开开山怪

想必看到这篇博客,一定对服务发现机制有一定的了解。 服务发现机制

String_guai 500

google gson是线程安全的,大胆调用吧!

关于gson线程安全的的提问和解答 http://stackoverflow.com/questions/10380835/is-it-ok-to-use-gson-instance-as-a-static-field-in-a-model-bean   官方bug修复报告 http://code.google.com/p/google-gson/issues/detail?id=63 ...

The Big Data Way 7697

Google Gson简明教程

简介Gson是Google出品的一个JSON解析library,它可以将任意的Java对象转换为JSON string,也可以将JSON string转换为对应的Java对象。 官方介绍如下: Gson is a Java library that can be used to convert Java Objects into their JSON representation. It ca

Ricky 4745

使用google.gson工具时getAsString()方法返回JsonNull异常问题解决

概述 在使用google.gson工具时,JsonElement的getAsString()方法返回JsonNull异常问题。 问题描述 使用google.gson工具时经常会使用的就是反序列化功能。比如看下面的一个方法: private static JsonParser parser= new JsonParser(); public String parseJsonString(String raw) { JsonElement jsonElement = JSON_PARSER.parse

qq_44887733的博客 3160

Gson解析String数据

Gson 介绍 Gson(又称Google Gson)是Google公司发布的一个开放源代码的Java库,主要用途为序列化Java对象为JSON字符串,或反序列化JSON字符串成Java对象。

weixin_43163359的博客 1958

BIO输给NIO了吗 —————— 开开开山怪

能看到这篇博客的人估计已经对BIO和NIO有了一定的了解 采用不同的IO对系统的性能来说影响也是不容小觑的。 下面我们来看普通的BIO的通信方式。 在这里插入代码片 ...

String_guai 582

Gson使用

介绍 Gson是谷歌官方推出的支持 JSON -- Java Object相互转换的 Java序列化/反序列化库 使用DEMO package json.gson; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.JsonArray; import com.google.gson.JsonObject; import com.google.gson.refl...

houkai的博客 433

Json转换神器之Google Gson的使用

1. 下载Gson的jar包,拷贝到项目的lib文件夹中,并将其加入到buildPath中。使用maven的同学,直接在pom中加入以下依赖即可: ? 1 2 3 4 5 dependency>   groupId>com.google.code.gsongroupId>   artifactId>gsona

wurensen的专栏 1682
上一篇: java 包扫描 —————— 开开开山怪
下一篇: java分发器 及(注解 + 反射机制)—————— 开开开山怪
开开开山怪
博客等级 码龄8年 41粉丝 30原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值