記一次踩坑 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類型,這樣就不會被自動轉換了

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM