Android:使用Gson常见问题(包含解决将Long型转化为科学计数法的问题)

一、解决将Long型转化为科学计数法的问题

1.1 场景

将一个对象转为Map类型时,调用Gson.fromJson发现,原来对象中的long类型的personId字段,被解析成了科学计数法,导致请求接口失败,报参数错误。

解决结果图
在这里插入图片描述

1.2、ExampleUnitTest.kt示例代码
data class ReuestParmObj(val personId: Long = 1668394335647, val personType: Int = 1)
class ExampleUnitTest {private val mGson: Gson = Gson()@Testfun gsonReuestParmJson() {val reuestParmObj = ReuestParmObj(1668394335647, 1)val reuestParmJson: String = mGson.toJson(reuestParmObj)println("reuestParmJson信息:$reuestParmJson")val mapParm: Map<String, *> =mGson.fromJson(reuestParmJson, Map::class.java) as Map<String, *>println("mapParms信息:$mapParm")}
}

测试结果
在这里插入图片描述

1.3 解决将Long型转化为科学计数法问题的方案

修改gson配置
private val mGson: Gson = GsonBuilder().setLongSerializationPolicy(LongSerializationPolicy.STRING).create()

data class ReuestParmObj(val personId: Long = 1668394335647, val personType: Int = 1)
class ExampleUnitTest {
//    private val mGson: Gson = Gson()private val mGson: Gson = GsonBuilder().setLongSerializationPolicy(LongSerializationPolicy.STRING).create()@Testfun gsonReuestParmJson() {val reuestParmObj = ReuestParmObj(1668394335647, 1)val reuestParmJson: String = mGson.toJson(reuestParmObj)println("reuestParmJson信息:$reuestParmJson")val mapParm: Map<String, *> =mGson.fromJson(reuestParmJson, Map::class.java) as Map<String, *>println("mapParms信息:$mapParm")}
}

测试结果
在这里插入图片描述

二、 把null值也转换,默认是不转换null值的

设置:serializeNulls()

 private val mGson: Gson = GsonBuilder().setLongSerializationPolicy(LongSerializationPolicy.STRING).serializeNulls().create()

三、Html的转换

Gson默认是把Html 转义的,但也可以设置不转义。
设置:disableHtmlEscaping()

class ExampleUnitTest {@Testfun testDisableHtmlEscaping(){val gson1: Gson = Gson()val gson2: Gson = GsonBuilder().disableHtmlEscaping().create()val htmlStr = "<h3>测试disableHtmlEscaping</h3>"println("未设置disableHtmlEscaping转换htmlStr结果:${gson1.toJson(htmlStr)}")println("设置disableHtmlEscaping转换htmlStr结果:${gson2.toJson(htmlStr)}")}
}

测试结果
在这里插入图片描述

四、设置输入json格式

默认的输出是compact格式,示例
{"personId":1668394335647,"personType":1}
设置:setPrettyPrinting()

class ExampleUnitTest {@Testfun testSetPrettyPrinting(){val gson1: Gson = Gson()val gson2: Gson = GsonBuilder().setLongSerializationPolicy(LongSerializationPolicy.STRING).setPrettyPrinting().create()val reuestParmObj = ReuestParmObj(1668394335647, 1)println("未设置 setPrettyPrinting 转换reuestParmObj结果:${gson1.toJson(reuestParmObj)}")println("设置 setPrettyPrinting 转换reuestParmObj结果:${gson2.toJson(reuestParmObj)}")}
}

测试结果
在这里插入图片描述

五、ExampleUnitTest.kt文件完整代码

import com.google.gson.Gson
import com.google.gson.GsonBuilder
import com.google.gson.LongSerializationPolicy
import com.google.gson.reflect.TypeToken
import org.junit.Test/*** Example local unit test, which will execute on the development machine (host).** See [testing documentation](http://d.android.com/tools/testing).*/data class ReuestParmObj(val personId: Long = 1668394335647, val personType: Int = 1)
class ExampleUnitTest {private val mGson1: Gson = Gson()private val mGson2: Gson =GsonBuilder().setLongSerializationPolicy(LongSerializationPolicy.STRING).serializeNulls().disableHtmlEscaping().create()@Testfun gsonReuestParmJson() {val reuestParmObj = ReuestParmObj(1668394335647, 1)val reuestParmJson1: String = mGson1.toJson(reuestParmObj)val reuestParmJson2: String = mGson2.toJson(reuestParmObj)println("reuestParmJson1 信息:$reuestParmJson1")println("reuestParmJson2 信息:$reuestParmJson2")//        val type = object : TypeToken<Map<String, *>>() {}.type
//        val mapParm: Map<String, *> = mGson1.fromJson(reuestParmJson, type)val mapParm1: Map<String, *> =mGson1.fromJson(reuestParmJson1, Map::class.java) as Map<String, *>println("mapParm1 信息:$mapParm1")val mapParm2: Map<String, *> =mGson2.fromJson(reuestParmJson2, Map::class.java) as Map<String, *>println("mapParms2 信息:$mapParm2")/*reuestParmJson1 信息:{"personId":1668394335647,"personType":1}reuestParmJson2 信息:{"personId":"1668394335647","personType":1}mapParm1 信息:{personId=1.668394335647E12, personType=1.0}mapParms2 信息:{personId=1668394335647, personType=1.0}*/}@Testfun testDisableHtmlEscaping() {val gson1: Gson = Gson()val gson2: Gson = GsonBuilder().disableHtmlEscaping().create()val htmlStr = "<h3>测试disableHtmlEscaping</h3>"println("未设置disableHtmlEscaping转换htmlStr结果:${gson1.toJson(htmlStr)}")println("设置disableHtmlEscaping转换htmlStr结果:${gson2.toJson(htmlStr)}")/*未设置disableHtmlEscaping转换htmlStr结果:"\u003ch3\u003e测试disableHtmlEscaping\u003c/h3\u003e"设置disableHtmlEscaping转换htmlStr结果:"<h3>测试disableHtmlEscaping</h3>"*/}@Testfun testSetPrettyPrinting() {val gson1: Gson = Gson()val gson2: Gson = GsonBuilder().setLongSerializationPolicy(LongSerializationPolicy.STRING).setPrettyPrinting().create()val reuestParmObj = ReuestParmObj(1668394335647, 1)println("未设置 setPrettyPrinting 转换reuestParmObj结果:${gson1.toJson(reuestParmObj)}")println("设置 setPrettyPrinting 转换reuestParmObj结果:${gson2.toJson(reuestParmObj)}")/*未设置 setPrettyPrinting 转换reuestParmObj结果:{"personId":1668394335647,"personType":1}设置 setPrettyPrinting 转换reuestParmObj结果:{"personId": "1668394335647","personType": 1}*/}
}

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

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

相关文章

leetcode108.把升序数组转换成二叉搜索树

题目描述 [-10,-3,0,5,9] 转换成如下二叉搜索树&#xff1a; 解题的核心原理是&#xff1a;二叉搜索树的中序遍历结果是一个升序数组&#xff0c;所以根节点的数值&#xff0c;也位于数组的中部。 class Solution {public TreeNode sortedArrayToBST(int[] nums) {return h…

基于Hadoop的汽车大数据分析系统设计与实现【爬虫、数据预处理、MapReduce、echarts、Flask】

文章目录 有需要本项目的代码或文档以及全部资源&#xff0c;或者部署调试可以私信博主项目介绍爬虫数据概览HIve表设计Cars Database Tables1. cars_data2. annual_sales_volume3. brand_sales_volume4. city_sales_volume5. sales_volume_by_year_and_brand6. sales_distribu…

MATLAB 手动实现一种高度覆盖值提取建筑物点云的方法(74)

专栏往期文章,包含本章 MATLAB 手动实现一种高度覆盖值提取建筑物点云的方法(74) 一、算法介绍二、算法实现1.代码2.效果总结一、算法介绍 手动实现一种基于高度覆盖值的建筑物点云提取方法,适用于高大的城市建筑物,比只利用高度提取建筑物的方法更加稳定和具有价值,主要…

IntelliJ IDEA 集成 ShardingSphere-JDBC 访问分库分表

背景 众所周知&#xff0c;IntelliJ IDEA 是 Java 领域常用的开发工具之一&#xff0c;IDEA Ultimate&#xff08;旗舰版&#xff09;或其他例如 DataGrip 等 Intellij 平台的工具都集成了对数据库的访问能力。 但是&#xff0c;对于做了分库分表的项目&#xff0c;直接使用 …

消防隐患在线小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;消防隐患举报管理&#xff0c;消防隐患分类管理&#xff0c;统计分类管理&#xff0c;处理结果管理&#xff0c;系统管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;我…

学习笔记 韩顺平 零基础30天学会Java(2024.8.18)

P514 Vector源码解读 P515 双向链表模拟 LinkedList的添加和删除可以通过改变节点的指向完成 遍历的时候&#xff0c;如果要重新遍历&#xff0c;要把指针调回到最前面或者最后面&#xff0c;才能重新全部遍历一次 插入的时候&#xff0c;插入对象的next和pre都要操作&#xff…

探索tailwindcss多主题切换

现在的多主题切换基本上都是用的 css 变量的形式, 而tailwindcss也支持 css 变量定义主题的方式 至于为什么用 tailwindcss变量, 还是因为 tailwind 写类名提示比较方便, 也不需要再在css或者style中去一个个var的形式去写变量了 这里我在assets/style/theme文件夹中创建了三个…

音视频开发

通过多线程分别获取高分辨率(1920 * 1080)和低分辨率(1280 * 720) 初始化VI模块 初始化HIGH VENC模块 初始化LOW VENC模块 初始化RGA模块 绑定 VI和HIGH VENC 绑定 VI和RGA 创建线程 HIGH VENC处理 RGA处理 LOW VENC处理 销毁 QP原理的讲解 QP参数调节&#xff0c;指的是量化…

【后端记录】修复MySql的错误修改的数据记录【binlog修复】

前言 今天入门后端的时候&#xff0c;不小心改了非预期的数据&#xff0c;因为还没学到事务&#xff0c;所以恢复数据还比较麻烦&#xff0c;站在巨人的肩膀上还是解决了&#xff0c;原文连接在下面 https://blog.csdn.net/qq_42874315/article/details/140480570 解决办法 原…

【自动驾驶】控制算法(二)三大坐标系与车辆运动学模型

写在前面&#xff1a; &#x1f31f; 欢迎光临 清流君 的博客小天地&#xff0c;这里是我分享技术与心得的温馨角落。&#x1f4dd; 个人主页&#xff1a;清流君_CSDN博客&#xff0c;期待与您一同探索 移动机器人 领域的无限可能。 &#x1f50d; 本文系 清流君 原创之作&…

第37讲:Cephfs文件系统的正确使用姿势

文章目录 1.Cephfs文件系统简介2.Cephfs文件系统细节介绍2.1.Cephfs文件系统多客户端隔离挂载2.2.Ceph集群中多个Cephfs如何单独使用 3.挂载多个Cephfs文件系统4.Cephfs文件系统多客户端隔离挂载实战4.1.创建一个Cephfs文件系统4.2.将Cephfs文件系统挂载到本地路径4.3.在Cephfs…

java:IDEA修改java版本的几个不同的地方

文章目录 项目JDK设置&#xff08;Project SDK&#xff09;项目模块级JDK设置&#xff08;Module SDK&#xff09;IDE级别的JDK设置Maven配置文件编译器&#xff08;Java Compiler&#xff09;构建工具配置文件&#xff08;如build.gradle或pom.xml&#xff09;.idea/misc.xml文…

Chrome快捷键提高效率

浏览效率提高快捷建 快速切换标签页 Ctrl 数字&#xff08;1或者2&#xff09;&#xff0c;标签页数字从左到右为顺序&#xff0c;1开始。快速切换标签页。 Ctrl1 到 Ctrl8 切换到标签栏中指定位置编号所对应的标签页 Ctrl9切换到最后一个标签页 CtrlTab 或 CtrlPgDown 切…

EasyCVR视频汇聚平台构建远程安防监控:5大亮点解析,助力安防无死角

随着科技的飞速发展&#xff0c;远程安防监控系统已经成为现代社会中不可或缺的一部分&#xff0c;无论是在小区、公共场所还是工业领域&#xff0c;安防监控都发挥着至关重要的作用。而EasyCVR作为一款功能强大的视频监控综合管理平台&#xff0c;其在构建远程安防监控系统方面…

英伟达开源 Nemotron-4-4B:小型模型,大能量

前沿科技速递&#x1f680; 在人工智能领域&#xff0c;语言模型已经成为推动自然语言处理&#xff08;NLP&#xff09;进步的关键力量。然而&#xff0c;随着模型规模的不断扩大&#xff0c;训练和部署这些大型语言模型&#xff08;LLM&#xff09;的资源成本也在急剧增加。为…

WUP-MY-LABEL-PRINTER 旻佑热敏打印机标签打印uniapp插件使用说明

插件地址&#xff1a;WUP-MY-LABEL-PRINTER 旻佑热敏打印机标签打印安卓库 简介 本插件主要用于旻佑热敏打印机打印标签&#xff0c;不支持票据打印。适用于旻佑的各型支持标签打印的热敏打印机。本插件开发时使用的打印机型号为MY-805嵌入式面板打印机&#xff0c;其他型号请…

uni-app--》打造个性化壁纸预览应用平台(二)

&#x1f3d9;️作者简介&#xff1a;大家好&#xff0c;我是亦世凡华、渴望知识储备自己的一名前端工程师 &#x1f304;个人主页&#xff1a;亦世凡华、 &#x1f306;系列专栏&#xff1a;uni-app &#x1f307;座右铭&#xff1a;人生亦可燃烧&#xff0c;亦可腐败&#xf…

深度学习的量化和剪枝

一&#xff1a;背景 如果要将深度学习的AI模型部署到受限设备&#xff08;FPGA&#xff09;上&#xff0c;往往需要更小的存储需求和最低的计算复杂度。当然&#xff0c;还得保持一定的性能&#xff08;下降在能够接受的范围&#xff09;。受限设备资源的环境&#xff0c;一般是…

数据结构与算法--插入排序与选择排序

文章目录 回顾提要排序基本概念排序的分类排序算法的稳定性排序算法的性能指标内排序 排序方法直接插入排序直接插入排序的要点直接插入排序的实现直接插入排序性能分析直接插入排序的适用情景 简单选择排序简单选择排序的要点简单选择排序的执行过程简单选择排序的实现简单选择…

分布式锁:Mysql实现,Redis实现,Zookeeper实现

目录 前置知识 Mysql实现分布式锁 1.get_lock函数 Java代码实现&#xff1a; 2.for update尾缀 Java代码实现&#xff1a; 3.自己定义锁表 Java代码实现&#xff1a; 4.时间戳列实现乐观锁 Java代码实现&#xff1a; Redis实现分布式锁 Zookeeper实现分布式锁&#…