ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2020-04-14 10:02:05  阅读:413  来源: 互联网

标签:map entry Map Double treeMap Integer new ot gson


之前一直使用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类型,这样就不会被自动转换了

 

标签:map,entry,Map,Double,treeMap,Integer,new,ot,gson
来源: https://www.cnblogs.com/lxk233/p/12696025.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有