Fastjson轉換json到帶泛型的對象(如Map)報錯解決

1 問題出現

在跑demo的時候,寫了個讀取json,然後轉換成HashMap的代碼,結果發現fastjson報了類型轉換異常:

private static HashMap<String,ErrorDto> errorCodeCache;

  static {
    String s = FileUtil.readResourceFile(ERROR_JSON_PATH);
    HashMap hashMap = JSON.parseObject(s, HashMap.class);
    errorCodeCache = hashMap;
}

異常信息:

java.lang.ClassCastException: com.alibaba.fastjson.JSONObject cannot be cast to com.zgd.shop.core.error.ErrorDto
at com.zgd.shop.core.error.ErrorCache.getMsg(ErrorCache.java:40) ~[classes/:na]
at com.zgd.shop.core.result.ResultUtil.getResult(ResultUtil.java:89) ~[classes/:na]
at com.zgd.shop.core.result.ResultUtil.failure(ResultUtil.java:71) ~[classes/:na]
at com.zgd.shop.core.result.ResultUtil.failure(ResultUtil.java:50) ~[classes/:na]

因爲fastjson轉換對象,方法是JSON.parseObject(String json,Class clazz),這個方法又沒辦法指定我們需要轉換的具體類型

比如我們想要得到的結果是HashMap<String,ErrorDto>, 但是因爲parseObject沒有指定泛型,所以

通過debug,可以看到json解析後,是一個HashMap<String,JsonObject>類型
在這裏插入圖片描述

2. 解決

fastjson除了上面的方法外,還重載了一個方法

public static <T> T parseObject(String text, TypeReference<T> type, Feature... features){}

就是這個TypeReference,修改後代碼:


    HashMap<String,User> map = JSON.parseObject(s, new TypeReference<HashMap<String,User>>(){});
  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章