对于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,951评论 19 139
  • 文章作者:Tyan博客:noahsnail.com 3.4 Dependencies A typical ente...
    SnailTyan阅读 4,201评论 2 7
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,766评论 18 399
  • JAVA面试题 1、作用域public,private,protected,以及不写时的区别答:区别如下:作用域 ...
    JA尐白阅读 1,183评论 1 0
  • 我想很多人都始于兴趣,终于成长。 因为觉得自己有一技之长,可以在某个领域发挥所长,因为觉得终于有一个公共平台可以让...
    凤歌儿阅读 320评论 6 4