之前一直使用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類型,這樣就不會被自動轉換了