對于json轉換實體類時候所拋出的類型轉換異常

近日,在項目中被一個問題所困擾。就是在json轉換成實體類的時候時不時的會拋出一個類型轉換異常。

異常詳細信息為:

net.sf.ezmorph.bean.MorphDynaBean cannot be cast to (實體類的全路徑)

經網上查閱了一些資料后發現,如果實體類中涉及到復雜的數據類型的時候,這個異常就會暴露出來。
實體類中所涉及到的數據類型有兩種:
分別有Stirng 和 list集合 集合的泛型則是另外一個實體類。廢話不多說直接上代碼:

//實體類一
 public class GoodsInfo {
    private String name;
    private List<Price> priceList;
    //gei,set方法省略
 }
//實體類二
public class Price {
    private Integer price;
    private String name;
    //get,set方法省略
}

測試過程:
在一個main方法中去兩個類里面進行初始化:

public static void main(String[] args) {
        GoodsInfo info = new GoodsInfo();
        Price price = new Price();
        Price price1 = new Price();
        List<Price> list = new ArrayList<>();
        price .setPrice(30);
        price.setName("CCTV5");
        
        price1 .setPrice(30);
        price1.setName("CCTV5");

        list.add(price);
        list.add(price1);
        info.setId("1434141");
        info.setName("choufei");
        info.setPriceList(list);    
        
        JSONObject json = JSONObject.fromObject(info);
        System.out.println(json);
        GoodsInfo info1 = new GoodsInfo();
        info1 = (GoodsInfo) JSONObject.toBean(json, GoodsInfo.class);
        Price pc = info1.getPriceList().get(0);
        System.out.println(pc.getPrice());
    }

當運行此main方法的時候就會拋出以下異常:

Exception in thread "main" java.lang.ClassCastException: net.sf.ezmorph.bean.MorphDynaBean cannot be cast to com.lty.pilipala.entity.Price
at com.lty.pilipala.test.Test.main(Test.java:42)

解決方法:

//在main中從json轉換對象的時候用map集合進行約束
JSONObject json = JSONObject.fromObject(info);
        System.out.println(json);
        GoodsInfo info1 = new GoodsInfo();
        Map<String, Object> map = new HashMap<>();
        map.put("priceList", Price.class);//注意,priceList就是實體類里面的參數名稱。
        info1 = (GoodsInfo) JSONObject.toBean(json, GoodsInfo.class, map);
        System.out.println(info1.getPriceList().get(0).getPrice());

輸出結果:

30

2017-11-23 上海 晴

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,923評論 18 139
  • 文章作者:Tyan博客:noahsnail.com 3.4 Dependencies A typical ente...
    SnailTyan閱讀 4,201評論 2 7
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,765評論 18 399
  • JAVA面試題 1、作用域public,private,protected,以及不寫時的區別答:區別如下:作用域 ...
    JA尐白閱讀 1,182評論 1 0
  • 我想很多人都始于興趣,終于成長。 因為覺得自己有一技之長,可以在某個領域發揮所長,因為覺得終于有一個公共平臺可以讓...
    鳳歌兒閱讀 320評論 6 4