美文网首页
对于json转换实体类时候所抛出的类型转换异常

对于json转换实体类时候所抛出的类型转换异常

作者: 请叫我犀牛先生 | 来源:发表于2017-11-23 19:28 被阅读0次

    近日,在项目中被一个问题所困扰。就是在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 上海 晴

    相关文章

      网友评论

          本文标题:对于json转换实体类时候所抛出的类型转换异常

          本文链接:https://www.haomeiwen.com/subject/jwctbxtx.html