记一次踩坑 Gson转换map对象时 Integer类型自动转换成Double类型

之前一直使用json转换map对象,因为公司统一使用gson,我按照网上转换map对象的方式转换:

Map<String, Object> params = gson.fromJson(gson.toJson(payMentResultDto), Map.class); 

结果对象里Integer类型自动变成double类型。。。

解决办法:

网上大致有俩种,1、修改源码(能力达不到)2、增加适配器

我找了一下,解决办法有俩种(比较实用)

1、网上看到的(自定义类型适配器),亲测可用

 //这俩段都是定义:private static Type typeToken = new TypeToken<TreeMap<String, Object>>(){}.getType();
Gson gson = new GsonBuilder()
            .registerTypeAdapter(
                    new TypeToken<TreeMap<String, Object>>(){}.getType(),
                    new JsonDeserializer<TreeMap<String, Object>>() {
                        @Override
                        public TreeMap<String, Object> deserialize(
                                JsonElement json, Type typeOfT,
                                JsonDeserializationContext context) throws JsonParseException {

                            TreeMap<String, Object> treeMap = new TreeMap<>();
                            JsonObject jsonObject = json.getAsJsonObject();
                            Set<Map.Entry<String, JsonElement>> entrySet = jsonObject.entrySet();
                            for (Map.Entry<String, JsonElement> entry : entrySet) {
                                Object ot = entry.getValue();
                                if(ot instanceof JsonPrimitive){
                                    treeMap.put(entry.getKey(), ((JsonPrimitive) ot).getAsString());
                                }else{
                                    treeMap.put(entry.getKey(), ot);
                                }
                            }
                            return treeMap;
                        }
                    }).create();//实际调用
Map<String, Object> params = gson.fromJson(gson.toJson(payMentResultDto), typeToken);
 原文链接:https://blog.csdn.net/wusj3/java/article/details/79525255

2、把对象中的Integer类型改成String类型,这样就不会被自动转换了

原文地址:https://www.cnblogs.com/lxk233/p/12696025.html

时间: 2024-10-07 06:13:33

记一次踩坑 Gson转换map对象时 Integer类型自动转换成Double类型的相关文章

JavaScript的类型自动转换高级玩法JSFuck

0 前言 最开始是不小心在微信公众号(程序员大咖)看到一篇JS的高逼格代码,然后通过里面的链接跳转到了JSFuck的wiki,就像顺着迷宫找宝藏的感觉,感叹JS的自动类型转换的牛逼. 1 样例 (!(~+[])+{})[--[~+""][+[]]*[~+[]] + ~~!+[]]+({}+[])[[~!+[]]*~+[]] //如何装逼用代码骂别人SB (([][[]]+[])[+!![]]+([]+{})[!+[]+!![]])//如何用代码优雅地证明自己NB 2 原理 1.对于非原

tp类型自动转换和自动完成

一.类型自动转换 在模型中对数据库字段自动完成 //模型中数据类型自动转换 添加一个$type数组即可protected $type=array( 'username'=>'serialize',//把username字段类型的值序列化 'password'=>'integer'//强制转换password字段类型为整型); 二.自动完成 在模型中代码如下 //自动完成 变量类型必须是[insert update auto ]等于触发器,每个方法代表不同参数protected $update=

C++自学笔记_单词转换map对象_《C++ Primer》

今天在干<C++ Primer>第10章的时候似乎遇到了一点小瓶颈,翻回第8章吃了顿回头草.所以,老话说得好:欠下的总是要还滴 :) 一个小程序,很简单:单词转换程序:程序输入两个文件,第一个文件包括了若干单词对,没对的第一个单词将出现在输入的字符串中,而第二个单词 则是用于输出.本质上,这个文件提供的是单词转化的集合——在遇到第一个单词时,应该将之替换为第二个单词.第二个文件则提供了与要转换的文本. 打个比方:如果单词转换文件的内容为: 而要转换的文本是: Code: #include &l

Struts2学习(二)———— 表单参数自动封装和参数类型自动转换

前篇文章对struts2的一个入门,重点是对struts2的架构图有一个大概的了解即可,之后的几篇文章,就是细化struts2,将struts2中的各种功能进行梳理,其实学完之后,对struts2的使用不外乎这几点,参数自动封装,拦截器的使用,数据校验,ognl表达(值栈和actionContext的讲解),struts2的标签,struts2的国际化,struts2的文件上传下载. 把这几个功能都学会了使用之后,struts2基本上就学完了.所以接下来的文章就是对这几个功能进行讲解.如何使用.

记一次踩坑:使用ksoap-android时造成的okhttp依赖冲突问题

项目中需要调用webservice接口,android SDK中并没有直接访问webservice接口的方法,于是我引入了ksoap-android的jar包,来实现访问webservice接口.刚开始一切还都比较顺利,成功从webservice接口获取到了返回的数据,直接运行在手机上一切也都正常.总之,经过一个多星期的奋斗,总算是完整的实现了需求改动.就在终于要松口气的时候,居然在最后打包签名APK时出了问题:Error:Execution failed for task ':app:tran

c++ 单词转换 map对象

#include <map> #include <sstream> #include <fstream> #include <iostream> #include <string> #include <exception> using namespace std; ifstream& openfile(ifstream &in,const string &filename){ in.close();//clos

ORACLE-012:oracle中纯数字的varchar2类型和number类型自动转换

使用过一个关联查询,两个表的字段定义了不同的类型.一个字段是varchar2类型,另一个字段是number类型,内容如下:'00187'和187.在使用中发现会自动将varchar2类型转换为number,即187和187. 效果与to_number()一样. 专门写了两个sql测试了下,如下: select case when '0110' = 110 then 'true' else 'false' end from dual; select case when to_number('011

关于var(string)++的类型自动转换

展示时间: var miao="50"; var fen="59"; var shi="00"; setInterval(fun, 1000); function fun(){ miao++;              //设置秒为string,但是运行++的时候,会先将miao转换成Number,再++:(下面fen,shi 同理) if(miao<10) { miao="0"+miao.toString(); } i

用 eval() 转换 Json 对象时,为什么要加括号?

var dataObj=eval("("+data+")");//转换为json对象 为什么 eval 这里,data 要用 "(".")" 括起来呢? 原因:由于json是以”{}”的方式来开始以及结束的,在JS中,它会被当成一个语句块来处理,所以必须强制性的将它转换成一种表达式. 加上圆括号的目的是迫使 eval 函数在处理 JavaScript 代码的时候强制将括号内的表达式(expression)转化为对象,而不是作为