對(duì)于json轉(zhuǎn)換實(shí)體類時(shí)候所拋出的類型轉(zhuǎn)換異常

近日,在項(xiàng)目中被一個(gè)問(wèn)題所困擾。就是在json轉(zhuǎn)換成實(shí)體類的時(shí)候時(shí)不時(shí)的會(huì)拋出一個(gè)類型轉(zhuǎn)換異常。

異常詳細(xì)信息為:

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

經(jīng)網(wǎng)上查閱了一些資料后發(fā)現(xiàn),如果實(shí)體類中涉及到復(fù)雜的數(shù)據(jù)類型的時(shí)候,這個(gè)異常就會(huì)暴露出來(lái)。
實(shí)體類中所涉及到的數(shù)據(jù)類型有兩種:
分別有Stirng 和 list集合 集合的泛型則是另外一個(gè)實(shí)體類。廢話不多說(shuō)直接上代碼:

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

測(cè)試過(guò)程:
在一個(gè)main方法中去兩個(gè)類里面進(jìn)行初始化:

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());
    }

當(dāng)運(yùn)行此main方法的時(shí)候就會(huì)拋出以下異常:

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轉(zhuǎn)換對(duì)象的時(shí)候用map集合進(jìn)行約束
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就是實(shí)體類里面的參數(shù)名稱。
        info1 = (GoodsInfo) JSONObject.toBean(json, GoodsInfo.class, map);
        System.out.println(info1.getPriceList().get(0).getPrice());

輸出結(jié)果:

30

2017-11-23 上海 晴

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,680評(píng)論 19 139
  • 文章作者:Tyan博客:noahsnail.com 3.4 Dependencies A typical ente...
    SnailTyan閱讀 4,505評(píng)論 2 7
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類相關(guān)的語(yǔ)法,內(nèi)部類的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚(yú)_t_閱讀 34,816評(píng)論 18 399
  • JAVA面試題 1、作用域public,private,protected,以及不寫(xiě)時(shí)的區(qū)別答:區(qū)別如下:作用域 ...
    JA尐白閱讀 1,272評(píng)論 1 0
  • 我想很多人都始于興趣,終于成長(zhǎng)。 因?yàn)橛X(jué)得自己有一技之長(zhǎng),可以在某個(gè)領(lǐng)域發(fā)揮所長(zhǎng),因?yàn)橛X(jué)得終于有一個(gè)公共平臺(tái)可以讓...
    鳳歌兒閱讀 393評(píng)論 6 4

友情鏈接更多精彩內(nèi)容